728x90
엔티티 매핑 어노테이션
@Entity
, @Table
: 객체와 테이블 매핑@Column
: 필드와 컬럼 매핑@Id
: 기본 키 매핑@ManyToOne, @JoinColumn, ...
: 연관관계 매핑
@Entity
JPA가 관리하는 클래스, 엔티티라 합니다. Table과 직접적으로 매핑되는 클래스
주의
기본 생성자 필수(public 또는 protected 생성자)
final, enum, interface, inner 클래스 사용 금지
저장할 필드에 final 사용 금지
final 클래스와 필드 사용 제한
JPA에 프록시를 사용해서 런타임에 동적 프록시를 생성하여 지연 로딩(Lazy Loading)을 지원하는데, final 키워드는 상속, 오버라이드를 제한하기 때문에 JPA에서 프록시로 클래스를 생성하는 것을 막습니다.
Enum 타임을 Entity로 사용 제한
상태를 저장할 수 없다
- enum타입은 상수 값들의 집합을 나타내기 위해 사용됩니다. 상수 값들은 변경 불가능하며, 추가적인 상태나 속성을 가질 수 없습니다.
데이터베이스 매핑의 복잡성
Entity
는 테이블과 매핑되어야는데 enum타입은 단순한 상수 값들의 집합으로, 데이터베이스의 테이블과 직접적으로 매핑하기 어렵습니다.
상속 불가능과 프록시 생성의 불가능
- JPA는 엔티티에 대해 프록시 객체를 생성하여 지연 로딩(Lazy Loading)을 지원합니다. 그러나
enum
은 상속을 허용하지 않기 때문에 프록시 객체를 생성할 수 없습니다.
Entity
대신 필드로는 사용이 가능합니다.Entity
에서 enum
을 필드로 사용할 때 이점은 값의 제한, 가독성 향상, 타입 안전성, 유지보수성 향상 등이 있습니다.
Interface 제한
JPA 엔티티는 상태와 동작을 가지는 클래스여야합니다. 하지만 Interface는 메서드 정의만을 포함하고, 상태를 저장할 수 없기 때문에 Entity로 생성할 수 없습니다.
Inner 클래스 제한
JPA 엔티티는 독립적으로 동작하는 클래스여야 합니다.
Inner 클래스는 Outer 클래스에 의존성이 있습니다.
728x90