엔티티 매핑(2) - 컬럼 매핑

2024. 1. 3. 21:05spring/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