매핑 어노테이션 정리
- @Column : 컬럼 매핑
- @Temporal : 날짜 타입 매핑
- @Enumerated : enum 타입 매핑
- @Lob : BLOB, CLOB 매핑
- @Transient : 매핑 무시(특정 필드를 컬럼에 매핑 하지 않음)
@Column
- name : 필드와 매핑할 테이블의 컬럼 이름 (기본값은 필드 이름)
- insertable, updateable : 데이터 베이스에 컬럼을 변경할거야 말거야? (기본값은 TRUE)
- nullable(DDL) : null 값의 허용 여부 설정 (false로 설정하면 DDL 생성 시에 not null 제약조건이 붙음)
- unique(DDL) : @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약 조건을 걸 때 사용한다 (그러나 이렇게 사용하면 unique 이름이 이상하게 되어서 @Table로 사용하는 것이 좋다)
- columnDefinition : 데이터베이스 컬럼 정보를 직접 줄 수 있다
ex) columnDefintion = "varchar(100) default "EMPTY"
- length(DDL) : 문자 길이 제약 조건, String 타입에서만 사용 (기본값은 255)
- percision, scale(DDL) : BigDecimal 타입 혹은 BigInteger에서 사용
참고로 double, float 타입에서는 적용되지 않으며, 아주 큰 숫자나 정밀한 소수를 다루어야할 때 사용
@Enumerated
자바 enum 타입을 매핑할 때 사용한다.
주의사항으로는 EnumType.ORDINAL을 사용하지 않는다.
만약
public enum RoleType {
USER, ADMIN
}
이렇게 있다고 생각했을 때,
EnumType.ORDINAL을 사용하면 0번째와 1번째로 구분을 한다
그래서 데이터 베이스에 일반 유저이면 0, 관리자이면 1이 들어가게 되는데
만약
public enum RoleType {
GUEST,USER, ADMIN
}
이렇게 되어버리면
0번째는 GUEST가 되어버리고 순서가 꼬이게 된다.
그래서 가급적 EnumType.STRING을 사용하자
기본값은 EnumType.ORIDNAL이다
@Temporal
날짜 타입(java.util.Date, java.uitl.Calendar)을 매핑할 때 사용
참고로 LocalDate(xxxx-xx-xx), LocalDateTime(xxxx-xx-xx xx:xx:xx)을 사용할 때는 생략가능(최신 하이버네이트에서 지원)
속성으로는
- value : TemoralType.DATE : 날짜, 데이터베이스 date 타입과 매핑
TemporalType.TIME : 시간, 데이터베이스 time 타입과 매핑
TemporalType.TIMESTAMP : 날짜와 시간 데이터베이스 timestamp 타입과 매핑
@Lob
데이터 베이스 BLOB(이미지 파일), CLOB(긴 문자열) 타입과 매핑
@Lob에는 지정할 수 있는 속성이 없다.
@Transient
- 필드 매핑 X
- 데이터 베이스 저장 X, 조회 X
주로 메모리상에서 임시로 어떤 값을 보관하고 싶을 때 사용한다.
@Transient
private Integer temp;