일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- autocomplete
- Spring Framework
- Mockito #Reflection #Sigleton #Test #JUnit
- LiveTemplate
- 톰캣
- spring
- 외장톰캣
- 디자인패턴 #싱글톤
- tomcat
- Today
- Total
자라선
[자바 ORM 표쥰 JPA 프로그래밍] 9일차 - 필드와 컬럼 매핑: 래퍼런스 본문
1. @Column
테이블 컬럼과 엔티티의 필드를 명시적으로 매핑하기 위한 어노테이션.
데이터베이스마다 데이터 타입 명이나 종류가 다다르기 때문에 JPA는 데이터베이스 방언에 맞춰 자동으로 생성해준다.
속성
- name : 필드와 매핑할 컬럼 이름을 작성한다. @Column 어노테이션을 명시하지 않았을때는 필드명을 그대로 매핑하게된다.
- nullable : 테이블 초기화시 DDL에 제약조건이 붙는데 기본값은 true 로 null이 허용된다. false 로 하게 된다면 not null 제약조건이 추가된다.
- unique : 테이블 초기화시 DDL에 유니크 제약조건 추가 여부를 묻는다. 간단히 하나의 컬럼만 추가시 사용되며 2개 이상의 유니크 제약조건을 추가하려면 @Table.uniqueConstraints 어노테이션을 사용해야한다.
- length : 테이블 초기화시 문자 길이를 제한한다. String 에서만 사용이 가능하며 기본값은 255 이다.
※ 주의
@Column 를 생략하여 테이블 초기화시 필드명을 그대로 매핑을 하게 되지만
자바의 원시 타입(int, char, double ...) 와 같은 타입의 경우 묵시적으로 사용시 DDL에 not null 제약조건이 붙여져 버린다.
그 이유는 자바는 원시 타입에 null 를 허용하지 않기 때문인데 이를 JPA가 알아서 not null로 처리하게된다.
하지만 @Column 어노테이션을 명시하게 된다면 not null 제약조건이 사라져 null 이 허용되게 되어버리는데 이때는 nullable 속성을 추가하여 false 로 하여 not null로 만들어주어야한다.
// Entity VO
private int notAnotation;
@Column
private int yesAnotation;
-- DDL
notAnotation integer not null,
yesAnotation integer,
2. @Enumerated
자바의 Enum 열거형을 컬럼과 매핑할때 사용된다.
@Enumerated(EnumType.ORDINAL)
private RoleType roleType;
속성은 2가지가 있으며 기본값은 EnumType.ORDINAL 이다.
- EnumType.ORDINAL
DB에 INSERT 시 왼쪽부터 0, 1, 2 ... 순번대로 지정하여 입력된다.
public enum RoleType {
ADMIN, USER // ADMIN: 0, USER: 1
}
- EnumType.STRING
DB에 INSERT 시 열거형 필드명 그대로 입력된다.
특별한 경우가 아니고서는 순번되로 입력되는 ORDINAL 보다는 되도록 STRING 을 선호한다.
public enum RoleType {
ADMIN, USER // ADMIN: ADMIN, USER: USER
}
3. @Temporal
날짜 타입을 지정하는 어노테이션이며 이 어노테이션은 속성값을 필수로 지정해야한다.
- TemporalType.DATE
DB의 date 타입과 매핑하며 년 월 일타입으로 저장한다.
@Temporal(value = TemporalType.DATE) // DB의 date 타입과 매핑(2020-10-10)
private Date date;
- TemporalType.TIME
DB의 time 타입과 매핑한다.
@Temporal(value = TemporalType.TIME) // DB의 time 타입과 매핑(13:08:50)
private Date time;
- TemporalType.TIMESTAMP
DB의 timestamp 타입과 매핑하며 날짜 시간을 입력한다.
@Temporal(value = TemporalType.TIMESTAMP) // DB의 timestamp 타입과 매핑(2020-10-10 13:08:50)
private Date timestamp;
4. @Lob
데이터베이스 상의 BLOB, CLOB 과 매핑을 해주는 어노테이션이며 자바의 엔티티 필드 타입에 맞춰 CLOB or BLOB으로 매핑해준다.
- CLOB: String, char[], java.sql.CLOB
- BLOB: bype[], java.sql.BLOB
@Lob // CLOB 타입과 매핑하게 된다.
private String clob;
5. @Transient
이 어노테이션이 지정된 필드는 DB 컬럼과 매핑하지 않는다.
@Transient
private String notMapping;
'Develop > JPA' 카테고리의 다른 글
[자바 ORM 표쥰 JPA 프로그래밍] 11일차 - 엔티티 및 테이블 연관관계 (0) | 2021.08.24 |
---|---|
[자바 ORM 표쥰 JPA 프로그래밍] 10일차 - 객체와 DB의 불일치성 (0) | 2021.08.19 |
[자바 ORM 표쥰 JPA 프로그래밍] 8일차 - 테이블 초기화 및 기본키 전략 (0) | 2021.08.14 |
[자바 ORM 표쥰 JPA 프로그래밍] 7일차 - flush() & 준영속 (0) | 2021.08.12 |
[자바 ORM 표쥰 JPA 프로그래밍] 6일차 - 영속성 컨텍스트 (0) | 2021.08.11 |