@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에 위임해주는 어노테이션