객체와 Table 매핑
객체와 Table을 매핑할 때 어떤 어노테이션들이 필요한지 가볍게 알아보자~~~
객체와 Table 매핑
@Entity
@Entity가 붙은 클래스는 JPA가 관리하게 되고, 우리는 이 클래스를 보고 엔티티라고 한다.
protected 이상의 접근제어자가 지정된 기본생성자(매개변수가 없는 생성자)를 가져야 하며,
JPA를 사용해서 Table과 매핑할 클래스에 @Entity는 필수 어노테이션이다.
@Table
엔티티와 매핑할 Table을 지정하기 위한 어노테이션이다. 이 어노테이션이 없으면 기본적으로 엔티티명과 같은 Table을 DB에서 찾아서 매핑해준다.
만약 클래스명과 엔티티명이 다를 경우에는 name 속성을 이용해서 Table명을 지정해주면 된다.
필드와 컬럼 매핑
@Id - PK 매핑 어노테이션
@Column
엔티티의 필드와 Table의 컬럼을 매핑해주는 어노테이션이다. 설정하지 않을 경우 필드명과 일치하는 컬럼명을 자동으로 매핑해준다.
이 어노테이션을 통하여 여러 설정을 할 수 있다.
name | 필드와 매핑할 테이블의 컬럼명 |
insertable, updatable | 등록, 변경 가능 여부 설정 - default: true |
nullable | not null 제약 조건 - default: true |
unique | unique 제약조건 - default: false |
length | 사이즈 |
columnDefinition | DB 컬럼 정보를 직접 주는 옵션 |
@Enumerated - enum 타입
Table의 컬럼과 필드를 매핑시킬 때 필드의 Type이 Enum 클래스이면 사용하는 어노테이션이다.
value | EnumType.ORDINAL, EnumType.STRING 중 택일 default: ORDINAL |
STRING을 쓰는 것이 강력하게 권장된다. ORDINAL과 STRING은 다음과 같은 차이가 있다.
Enum Type의 필드에 임의의 Enum 값을 줬다고 가정하자~~~
ORDINAL: 해당 Enum 값이 선언된 순서를 찾아 그 값을 컬럼에 넣어준다.
STRING: 해당 Enum 값의 문자열 그대로 컬럼에 넣어준다.
ORDINAL로 했다가는 Enum 안의 옵션 값이 추가되고 삭제되는 것에 대응하기 힘들고, 이로 인해 나중에 어떤 봉변을 당하게 될지 모르게 만든다.
@Temporal
value | TemporalType.DATE, TemporalType.TIME, TemporalType.TIMESTAMP 중 택일 |
닐짜 타입(java.util.Date)을 나타내기 위한 Annotation이다. 1.8 이전에 JAVA에서는 Date 클래스로 날짜와 시간을 모두 포함하였고,
DB에는 날짜, 시간, 날짜 + 시간이 전부 다른 Type으로 취급되었기 때문에 이를 통일하기 위해 생긴 어노테이션이다.
JAVA 1.8부터는 LocalDate, LocalTime, LocalDateTime이 생겼는데, 해당 타입의 필드에는 이 어노테이션이 필요없다.
@Lob
DB의 blob과 clob Type에 매핑하기 위한 어노테이션. 필드의 Type에 따라서 blob과 clob으로 알아서 매핑된다.
clob - 필드의 Type이 String과 같이 문자일 경우
blob - 필드의 Type이 문자가 아닐 경우
@Transient - 필드가 컬럼과 매핑되지 않을 경우 사용하는 Annotation