1. 서론
JPA 프로젝트를 진행하면서 공부했던 내용을 정리하고자 한다. 섹션별로 간단히 회고할 예정이다.
2. 엔티티란?
JPA에서의 엔티티란 데이터배이스에서 '테이블'과 매핑되는 자바 클래스이다.
JPA 엔티티는 DB의 테이블 구조와 매핑되어 객체지향적으로 데이터를 다룰 수 있다.
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Employee{
@Id
@GeneratedValue
private Long id;
/* ... */
}
1. @Entity
Spring Framework에 엔티티 클래스임을 정의하는 어노테이션.
2. @Getter
Lombok에서 제공해 주는 getter 메서드 자동 새성 어노테이션이다. 이를 통해 엔티티 필드에 대한 직접 접근이 아닌, 캡슐화하여 안전하게 조회할 수 있다. (필드를 private로 선언하고 public인 getter로 필드를 조회할 수 있다.)
단, JPA 엔티티에서 @Setter 어노테이션은 가급적 쓰지 않는 게 좋다. 대표적으로 2가지 이유가 있다.
1) setter 사용의도를 파악하기 힘들다. setter를 사용한 것이 create인지, update인지 그 사용의도를 파악하기 어렵다.
setter 대신 수행로직이 명확한 메서드로 이름을 짓는 것이 좋다. ex) updateNickname(), changeNickname() 등
2) setter 메서드는 public 접근지정자 이므로, 어디서든 엔티티의 필드값이 변경될 수 있다.
3. @NoArgsConstructor(access = AccessLevel.PROTECTED)
이것도 Lombok에서 제공해주는 어노테이션으로 파라미터가 없는 기본 생성자를 자동으로 생성해주는 어노테이션이다.
JPA 표준 스펙에 따르면, 엔티티엔 protected인 기본 생성자가 꼭 있어야한다.
4.@Id
테이블에서 PK를 의미.
5. @GeneratedValue
자동으로 증가해주는 시퀀스 기능을 담당하는 어노테이션.
'웹 개발 공부 : Back-end > JPA' 카테고리의 다른 글
[JPA 프로젝트 회고 - 5] JPA에서 DTO를 사용하는 이유 (feat. 코드 보안을 위해 수정) (0) | 2024.08.19 |
---|---|
[JPA 프로젝트 회고 - 4] java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ~ 에러 (0) | 2024.08.10 |
[JPA 프로젝트 회고 - 3] 영속성 컨텍스트 (Persistence Context) (0) | 2024.08.09 |
[JPA 프로젝트 회고 - 2] 레포지토리 (Repository) (0) | 2024.07.27 |
[JPA] JPA vs Mybatis (0) | 2024.07.17 |