JPA

[JPA] 엔터티 매핑 어노테이션 정리 (@Entity, @Colum, @Id)

준몽쓰 2024. 12. 13. 00:01

@Entity, @Table : 객체와 테이블 매핑

@Id : 기본 키 매핑

@Colum : 필드와 컬럼 매핑

@ManyToOne, @JoinColum : 연관관계 매핑

 

@Entity

- DB테이블에 대응하는 하나의 클래스

- 보통 기본 클래스 이름을 사용

- 스프링부트에게 '여긴  Entity 영역'이라고 알려주는 어노테이션

- 해당 어노테이션이 붙은 클래스는 JPA가 관리해주며 JPA를 사용해서 DB테이블과 매핑할 클래스는 @Entity를 붙여야지 매핑 가능.

 

@NoArgsConstructor(access = AccessLevel.PROTECTED)

- 파라미터가 없는 기본 생성자를 자동으로 생성해주는 것

 

Entity에 왜 붙는걸까?

자바의 ORM 기술인 JPA는 기본적으로 기본 생성자를 요구한다. 기본생성자가 없으면 에러가 발생한다.

그래서 Entity에 @NoArgsConstructor 반드시 붙여주어야한다.

 

(access = AccessLevel.PROTECTED)로 설정 이유?

Entity에 외부 접근을 차단하기 위해 PROTECTED를 활용하는 것.

 

@Getter

- 엔티티의 필드를 조회할 때 사용

- 보통 @Getter와 @Setter 같이 쓰임

 

@Getter만 단독으로 사용하는 이유?

@Setter를 써주면 entity가 변경될 수 있는 위험이 따르기 때문이다. 특히 PK의 경우 변경되지 않아야 하는 데이터인데 @Setter로 인해 데이터가 변경된다면 어디서 변경이 되었는지 찾기 힘들어진다.

 

[기본 키 매핑]

직접 할당 : @Id만 사용

자동 할당 : @Id와 @GeneratedValue 같이 사용

 

@Id 

- DB의 PK를 매칭해주는 어노테이션

 

@GeneratedValue(starategy = GenerationType.IDENTITY)

- 기본키 생성을 DB에 위임해주는 어노테이션