엔티티 클래스 내 필드는 테이블의 컬럼과 매핑된다 .
컬럼과 필드를 상세하게 매핑하도록 도와주는 애노테이션들을 정리해보자.
@Column
말 그대로 필드와 컬럼을 매핑해주는 속성을 가진 애노테이션이다.
// @Column
public @interface Column {
String name() default ""; // 필드와 매핑될 실제 DB 테이블 컬럼 이름
boolean unique() default false; // 한 개의 컬럼에 유니크 제약조건을 거는 속성이다. @Column의 unique 프로퍼티는 랜덤 값으로 제약조건 이름을 갖기 때문에 @Table 애노테이션의 uniqueConstraint 프로퍼티를 일반적으로 사용한다.
boolean nullable() default true; // null 값 허용여부를 설정한다. false로 지정시 컬럼은 Not null 제약조건을 갖는다.
boolean insertable() default true; // 해당 컬럼에 등록 가능 여부를 판단하는 프로퍼티
boolean updatable() default true; // 해당 컬럼에 변경 가능 여부를 판단하는 프로퍼티
String columnDefinition() default ""; // 컬럼 정보를 직접 지정할 수 있다. Dialect에 맞게 지정하는 것이 가능하며 입력한 정보를 통해 컬럼이 생성된다.
String table() default "";
int length() default 255; // String 타입에만 사용되며, 문자 타입의 길이를 지정한다 .
int precision() default 0; // 소수점을 포함한 전체 자릿수를 지정할 수 있는 프로퍼티이다. BigDecimal 타입에서 사용된다. (double / float 적용 X)
int scale() default 0; // 소수의 자릿수를 지정할 수 있는 프로퍼티이다. BigDecimal 타입에서 사용된다. (double / float 적용 X)
}
@Enumerated
Enum 타입과 매핑을 가능하게 해주는 애노테이션이다. @Enumerated 애노테이션을 통해서 필드 값을 String 으로 주는 것이 아닌 enum 타입으로 주는 것이 가능하다.
value 값은 EnumType.STRING과 ORDINAL이 있다.
default로 설정되어있는 ORDINAL 속성은 순서값이 숫자 타입으로 저장된다. 하지만 , 요구사항 변경으로 인해 순서가 변경되는 경우 DB내 데이터의 순서가 완전함을 보장하지 못하기 때문에 STRING 속성으로 사용하는 것이 중요하다.
public enum Grade {
GUEST, VIP
}
public class Member {
...
@Enumerated(EnumType.STRING)
private Grade grade;
}
@Lob
DB 내 CLOB, BLOB 타입과 매핑되는 애노테이션이다.
매핑되는 필드가 문자열인 경우 CLOB가 매핑되고, 나머지 타입은 모두 BLOB 타입으로 매핑된다.
- CLOB : String , char[], java.sql.CLOB
- BLOB : byte[], java.sql.BLOB
@Temporal
날짜 타입을 매핑할때 사용한다. Java 8 이후 LocalDate와 LocalDateTime을 지원하면서 해당 타입의 필드를 사용하는 경우 @Temporal 애노테이션 없이 날짜 타입을 지정하는 것이 가능하다.
public enum TemporalType {
DATE, // 날짜
TIME, // 시간
TIMESTAMP; // 날짜, 시간
private TemporalType() {
}
}
@Transient
필드와 매핑되지 않도록 해주는 애노테이션이다. 해당 애노테이션과 매핑된 필드는 DB에 저장 및 조회가 되지 않고 메모리 상에서 임시로 값을 보관해 사용하기 위해서 지정한다.
📄 References
김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 : https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
'Backend > JPA' 카테고리의 다른 글
다양한 연관관계 매핑 (0) | 2022.05.02 |
---|---|
단방향, 양방향 매핑 (0) | 2022.04.26 |
기본키 매핑, @Id, @GeneratedValue (0) | 2022.04.19 |
객체와 테이블 매핑, @Entity, @Table (0) | 2022.04.19 |
영속성 관리, 영속성 컨텍스트 (0) | 2022.04.18 |