컬럼 매핑 어노테이션 정리 @Column, @Temporal, @Enumerated, @Lob, @Transient
2021. 1. 18. 13:19ㆍJPA/JPA
@Column
속성 | 설명 | 기본값 |
name | 필드와 매핑할 테이블의 컬럼명 | 객체의 필드 이름 |
insertable updatable |
등록, 변경 가능 여부 | true |
nullable(DDL) | not null 제약 조건 | true |
unique(DDL) | unique 제약 조건 @Table의 uniqueConstraints와 같지만 제약 조건 이름을 설정할 수 없어 실무에선 @Table의 uniqueConstraints 사용을 권장한다. |
|
columnDifinition(DDL) | 데이터베이스의 컬럼 정보를 직접 설정할 수 있다. 예) varchar(100) default 'EMPTY' | |
length(DDL) | 문자의 길이 제약조건, String 타입에만 사용한다. | 255 |
presicion scale(DDL) |
BigDecimal 타입에서 사용한다(BigInteger도 사용할 수 있다). precision은 소수점을 포함한 전체 자 릿수를, scale은 소수의 자릿수 다. 참고로 double, float 타입에는 적용되지 않는다. 아주 큰 숫자나 정 한 소수를 다루어야 할 때만 사용한다. | presicion = 19 scale = 2 |
@Enumerated
자바의 enum타입을 매핑할때 사용한다.
속성 | 설명 | 기본값 |
value | EnumType.ORDINAL: enum 순서를 데이터베이스에 저장 EnumType.STRING: enum 이름을 데이터베이스에 저장 |
EnumType.ORDINAL-> 주의! 사용하지 말것. 데이터베이스에 enum의 순서가 저장되어 의미없는 데이터가 저장 됨. 사용하려면 EnumType.STRING으로 사용을 권장! |
@Temporal
날짜타입(java.util.Date, java.util.Calendar)을 매핑할때 사용.
자바8에서 지원하는 LocalDate, LocalDateTime을 사용할때는 생략 가능(하이버네이트 지원)
속성 | 설명 |
value | TemporalType.DATE: 날짜, 데이터베이스의 date타입과 매핑 (예: 2013-10-11) TemporalType.TIME: 시간, 데이터베이스의 time타입과 매핑 (예: 12:00:00) TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이스의 timestamp타입과 매핑 (예: 2013-10-11 12:00:00) |
@Lob
- @Lob에는 지정할 수 있는 속성이 없음.
- 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
- CLOB: String, char[], java.sql.CLOB
- BLOB: byte[], java.sql.BLOB
@Transient
- 데이터베이스와 상관없이 개발자가 필요에 의해 메모리에서만 사용하고 싶은 필드를 지정하고 싶을때 사용한다.
- 데이터베이스에 저장, 조회 되지 않는다.