본문 바로가기

JPA

객체와 Table 매핑

객체와 Table을 매핑할 때 어떤 어노테이션들이 필요한지 가볍게 알아보자~~~

 

객체와 Table 매핑

@Entity

@Entity가 붙은 클래스는 JPA가 관리하게 되고, 우리는 이 클래스를 보고 엔티티라고 한다.

protected 이상의 접근제어자가 지정된 기본생성자(매개변수가 없는 생성자)를 가져야 하며,
JPA를 사용해서 Table과 매핑할 클래스에 @Entity는 필수 어노테이션이다.

 

@Table

엔티티와 매핑할 Table을 지정하기 위한 어노테이션이다. 이 어노테이션이 없으면 기본적으로 엔티티명과 같은 Table을 DB에서 찾아서 매핑해준다.
만약 클래스명과 엔티티명이 다를 경우에는 name 속성을 이용해서 Table명을 지정해주면 된다.


필드와 컬럼 매핑

@Id - PK 매핑 어노테이션

 

@Column

엔티티의 필드와 Table의 컬럼을 매핑해주는 어노테이션이다. 설정하지 않을 경우 필드명과 일치하는 컬럼명을 자동으로 매핑해준다.
이 어노테이션을 통하여 여러 설정을 할 수 있다.

name 필드와 매핑할 테이블의 컬럼명
insertable, updatable 등록, 변경 가능 여부 설정 - default: true
nullable not null 제약 조건 - default: true
unique unique 제약조건 - default: false
length 사이즈
columnDefinition DB 컬럼 정보를 직접 주는 옵션

 

@Enumerated - enum 타입

Table의 컬럼과 필드를 매핑시킬 때 필드의 Type이 Enum 클래스이면 사용하는 어노테이션이다.

value EnumType.ORDINAL, EnumType.STRING 중 택일
default: ORDINAL

STRING을 쓰는 것이 강력하게 권장된다. ORDINAL과 STRING은 다음과 같은 차이가 있다.

Enum Type의 필드에 임의의 Enum 값을 줬다고 가정하자~~~

ORDINAL: 해당 Enum 값이 선언된 순서를 찾아 그 값을 컬럼에 넣어준다.

STRING: 해당 Enum 값의 문자열 그대로 컬럼에 넣어준다.

ORDINAL로 했다가는 Enum 안의 옵션 값이 추가되고 삭제되는 것에 대응하기 힘들고, 이로 인해 나중에 어떤 봉변을 당하게 될지 모르게 만든다.

 

@Temporal

value TemporalType.DATE, TemporalType.TIME, TemporalType.TIMESTAMP 중 택일

닐짜 타입(java.util.Date)을 나타내기 위한 Annotation이다. 1.8 이전에 JAVA에서는 Date 클래스로 날짜와 시간을 모두 포함하였고,
DB에는 날짜, 시간, 날짜 + 시간이 전부 다른 Type으로 취급되었기 때문에 이를 통일하기 위해 생긴 어노테이션이다.

JAVA 1.8부터는 LocalDate, LocalTime, LocalDateTime이 생겼는데, 해당 타입의 필드에는 이 어노테이션이 필요없다.

 

@Lob

DB의 blob과 clob Type에 매핑하기 위한 어노테이션. 필드의 Type에 따라서 blob과 clob으로 알아서 매핑된다.

clob - 필드의 Type이 String과 같이 문자일 경우

blob - 필드의 Type이 문자가 아닐 경우

 

@Transient - 필드가 컬럼과 매핑되지 않을 경우 사용하는 Annotation

 

 

참고강의: 배달의 민족 개발팀장 김영한 강사님의 JPA 강의

'JPA' 카테고리의 다른 글

기본키 매핑  (0) 2021.02.15
DB 스키마 자동 생성  (0) 2021.02.14
flush  (0) 2021.02.13
영속성 컨텍스트의 장점  (0) 2021.02.13
영속성 컨텍스트  (0) 2021.02.13