일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Invalid bound statement (not found)
- RFC723x
- initialDelay
- KAKAOLOGINAPI
- fixedDelay
- @Entity
- @Table
- 무상태프로토콜
- gitreset
- HTTPMESSAGE
- 멱등활용
- 김영한JPA
- SpringBoot
- JPA
- Git
- 캐쉬가능
- anyMatch
- ERROR TYPE : org.apache.ibatis.binding.BindingException
- http
- 매핑정보가없는필드
- 데이터베이스 방언
- org.apache.ibatis.binding.BindingException
- 자바ORM표준프로그래밍
- HTTP3
- hibernate.dialect
- 네이버 연결된 서비스
- Transaction not successfully started
- DB방언
- 네이버로그인API
- gitrevert
- Today
- Total
twocowsong
필드와 컬럼 매핑 : @Column 본문
깃허브 정리 URL : https://github.com/sWineTake/jpa.git
JPA가 제공하는 필드와 컬럼 매핑용 어노테이션들을 정리하였습니다.
분류 | 매핑 어노테이션 | 설명 |
필드와 컬럼 매핑 | @Column | 컬럼을 매핑 |
@Enumerated | 자바의 enum타입을 매핑 | |
@Temporal | 날짜 타입을 매핑 | |
@Lob | BLOB, CLOB 타입을 매핑 | |
@Transient | 특정 필드를 DB에 매핑하지 않음 | |
기타 | @Access | JPA가 엔티티에 접근하는 방식 지정 |
@Column
@Column은 객체 필드를 테이블 컬럼에 매핑합니다. 가장 많이사용되고 기능도 많습니다.
속성중에 name, nullable이 주로 사용되고 나머지는 잘 사용되지 않는 편입니다.
insertable, updatable 속성은 DB에 저장되어 있는 정보를 읽기만 하고 실수로 변경하는것을 방지할 때 사용합니다.
(@Column속성을 정리하였으며 거의사용하지않는 내용은 포함하지않았습니다.)
속성 | 기능 | 기본값 |
name | 필드와 매핑할 테이블 컬럼 이름 | 객체의 필드 이름 |
nullable(DDL) | null 값의 허용 여부를 설정합니다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙습니다. | true |
unique(DDL) | @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용합니다. 만약 두 컬럼 이상을 사용해서 유니크 제약조건을 사용하면 클래스 레벨에서 @Table.uniqueConstraints를 사용해야 합니다. | |
columnDefinition(DDL) | 데이터베이스 컬럼 정보를 직접 줄 수 있습니다. | 필드의 자바 타입과 방언 정보를 사용해서 적절한 컬럼 타입을 생성합니다. |
length(DDL) | 문자 길이 제약조건, String 타입에만 사용합니다. | 255 |
percision, scale(DDL) | BigDecimal 타입에서 사용합니다. percision은 소수점을 포함한 전체 자릿수를 scale은 소수의 자릿수입니다. |
DDL 생성 속성에 따라 어떤 DDL이 생성되는지 확인해봅시다.
- nullable(DDL 생성 기능)
@Column(nullable = false)
private String data;
// 생성된 DDL
data varchar(255) not null;
- unique(DDL 생성 기능)
@Column(unique = true)
private String username;
// 생성된 DDL
alert table Tablename
add constraint UK_Xxx unique (username)
- columnDefinition
@Column(columnDefinition = "varchar(100) default 'EMPTY'")
private String date;
// 생성된 DDL
data varchar(100) default 'EMPTY'
- length
@Column(length = 400)
private String date;
// 생성된 DDL
data varchar(400)
- precision, scale
@Column(precision = 10, scale = 2)
private BigDecimal cal;
// 생성된 DDL
cal numeric(10, 2) // H2, PostgreSQL
cal number(10, 2) // 오라클
cal decimal(10, 2) // MySQL
@Column 생략
@Column을 생략 시 대부분 @Column속성의 기본값이 적용되는데 기본타입일 때는 nullable 속성에 예외가 있습니다.
int data1; // @Column 생략, 자바 기본 타입
data1 integer not null // 생성된 DDL
Integer data2; // @Column 생략, 자바 기본 타입
data2 integer; // 생성된 DDL
@Column
int data3; // @Column 생략, 자바 기본 타입
data3 integer; // 생성된 DDL
int data1 같은 자바 기본 타입에는 null 값을 입력할 수 없습니다.
Integer data2처럼 객체 타입일 때만 null 값이 허용 됩니다.
따라서 자바 기본 타입인 int data1을 DDL을 생성 할 때는 not null 제약조건을 추가하는것이 안전합니다.
JPA에서는 data1에 자동으로 not null을 추가합니다.
반면에 객체 타입인 data2에는 not null을 자동으로 추가하지 않습니다.
data3처럼 @Column을 사용하면 기본값이 nullable=true 이므로 not null 제약조건을 추가하지않습니다.
따라서 자바 기본타입에 @Column을 사용하면 nullable=false로 지정하는것이 안전합니다.
'IT > JPA' 카테고리의 다른 글
@Temporal (0) | 2022.05.20 |
---|---|
@Enumerated (0) | 2022.05.19 |
기본 키 매핑 정리 (0) | 2022.05.16 |
AUTO 전략 (0) | 2022.05.16 |
TABLE 전략 (0) | 2022.05.15 |