2024. 1. 3. 21:05ㆍspring/JPA
필드와 컬럼 매핑 분류
분류 | 매핑 어노테이션 | 설명 |
필드와 컬럼 매핑 | @Column | 컬럼 매핑 |
@Enumerated | enum 타입 매핑 | |
@Temporol | 날짜 타입 매핑 | |
@Lob | BLOB, CLOB 타입 매핑 | |
@Transient | 특정 필드 매핑 제외 | |
기타 | @Access | JPA가 엔티티에 접근하는 방식을 지정 |
@Column
@Column은 객체 필드를 테이블 컬럼에 매핑한다. 가장 많이 사용되고 기능도 많다.
속성 중에 name, nullable이 주로 사용되고 나머지는 잘 사용되지 않는다.
- name : 필드와 매핑할 테이블의 컬럼 이름
- insertable : 엔티티 저장 시 이 필드는 데이터베이스에 저장하지 않는다.(읽기 전용)
- updatable : 엔티티 수정 시 이 필드는 데이터베이스에 수정하지 않는다.(읽기 전용)
- table : 하나의 엔티티를 두 개 이상의 테이블에 매핑할 때 사용한다. 지정한 필드를 다른 테이블에 매핑할 수 있다.
- nullable(DDL) : null 값 허용 여부
- unique (DDL) : 한 컬럼에 간단한 유니크 제약조건을 걸 때 사용한다.
- columnDefinition(DDL) : 데이터베이스 컬럼 정보를 직접 줄 수 있다.
- length(DDL) : 문자 길이 제약조건, String 타입에만 사용한다.
@Enumerated
자바의 enum 타입을 매핑할 때 사용한다.
- value
EnumType.ORDINAL : enum 순서를 데이터베이스에 저장
EnumType.STRING : enum 이름을 데이터베이스에 저장
@Enumerated(EnumType.STRING)
private RoleType roleType;
웬만하면 STRING을 사용하자 순서로 저장하면 enum에 정의된 순서가 바뀔경우 DB를 다시 마이그레이션해야 할 수 있다.
@Temporal
날짜 타입을 매핑할 때 사용한다.
- value
TemporalType.DATE : 날짜, 데이터베이스 date 타입과 매핑
TemporalType.TIME : 시간, 데이터베이스 time 타입과 매핑
TemporalType.TIMESTAMP : 날짜와 시간, 데이터베이스 timestamp 타입과 매핑
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
@Lob 에는 지정할 수 있는 속성이 없다. 대신 매핑하는 필드 타입이 문자면 CLOB으로 매핑하고 나머지는 BLOB으로 매핑한다.
CLOB : String, char [], java.sql.CLOB
BLOB : byte[], java.sql.BLOB
@Lob 사용 예
@Lob
private String description;
@Access
JPA가 엔티티에 접근하는 방식을 지정한다.
필드 접근 : AccessType.FIELD로 지정한다. 필드 접근 권한이 private이어도 접근할 수 있다.
프로퍼티 접근 : AccessType.PROPERTY로 지정한다. 접근자getter를 사용한다.
'spring > JPA' 카테고리의 다른 글
고급매핑 - 상속 관계 매핑 (0) | 2024.01.15 |
---|---|
연관관계 매핑(2) - 단방향, 양방향 (0) | 2024.01.04 |
엔티티 매핑(1) - 엔티티, 기본 키 매핑 (1) | 2023.12.29 |
영속성 관리(2) (0) | 2023.12.28 |
영속성 관리(1) (1) | 2023.12.28 |