Entity의 기본 속성(annotation)
요약
Annotation | Description |
@Entity | 해당 객체는 JPA에서 관리한다고 선언. 단, Primary Key는 필수이다. |
@Table | Table을 만든다. Data Migration을 할 때 Table 이름을 추가적으로 설정해서 사용한다. |
@Column | 각 필드의 속성을 지정한다. |
@Transient | DB에 해당 값이 반영되지 않는다. |
@Enumerated | Java의 enum 타입을 엔티티 클래스의 속성으로 사용할 수 있다. |
@Entity
해당 객체는 JPA에서 관리함을 선언한다. 이때 PK(Primary Key)가 반드시 수반된다.
[사용 예시]
@Entity
public class User {
@Id // Primary Key
@GeneratedValue // 아무것도 입력안하면 AUTO값을 이용 -> 각 DB에 적합한 값을 자동으로 넘겨준다.
private Long id;
...
@Table
Table을 만든다.
대표적으로 Data Migration을 할 때 Table 이름을 추가적으로 설정해서 사용한다.
ex : @Table(name = "user_legacy")
@Column
각 필드의 속성을 지정한다.
DB에서 각 Column의 속성을 지정한다고 보면 된다. (ex : Nullable, unique, insertable 등)
굴직하게 특성들을 정리하면 다음과 같다.
(1) unique : 동일한 값이 존재해도 되는지 여부
(2) nullable : Null값으로 들어가도 되는지 여부
(3) insertable : insert(입력 = CRUD에서 'C')시점에서 데이터 입력의 허락 여부
(4) updatable : update(수정 = CRUD에서 'U')시점에서 데이터 수정의 허락 여부
[사용 예시]
@Column(name="crdtat")
private LocalDateTime createdAt;
@Transient
DB에 데이터가 반영되지 않는다.
영속성처리에서 제외되어 해당 객체와 생명주기를 같이한다.
[사용 예시]
@Transient
private String testData;
@Enumerated
Java의 enum 타입을 엔티티 클래스의 속성으로 사용할 수 있다.
예를들어 enum이 다음과 같이 생겼다고 가정하자.
@Enumerated 어노테이션에는 두 가지 EnumType이 존재한다.
EnumType.ORDINAL : enum 순서 값을 DB에 저장
EnumType.STRING : enum 이름을 DB에 저장
Enum의 타입을 지정하지 않을 경우, 값이 틀어질 수 있기 때문에 반드시 타입을 지정하도록 하자.
enum Gender{
Male,
Female;
}
Ordinal로 저장하고 gender 속성에 Gender.Male로 값을 셋팅하면 DB에 저장되는 값은 1이다.
Gender.Female의 경우 Gender에 선언되어 있는 순선의 값이 되기 때문에 2가 DB에 저장된다.
만약 Ordinal이 아닌 String으로 어노테이션 타입을 지정하면 "MALE", "FEMALE" 문자열 자체가 저장된다.