JPA
[JPA] 일반필드와 컬럼 매핑
steadyMan
2022. 8. 20. 00:20
JPA에서는 엔티티의 필드와 DB의 컬럼을 매핑하여 사용하는데 주로 애노테이션 기반으로 매핑이 가능하다.
DDL 생성 기능을 사용할때도 옵션 추가가 가능한데 DDL 생성 기능은 제외하고
기본적인 필드와 컬럼의 매핑 방법에 알아보자
@Column
필드와 매핑할 테이블의 컬럼이름을 직접 입력해야 할 때 사용한다. 등록, 변경에 가능 여부를 옵션으로 부여 가능하다.
@Entity
public class Member {
@Column(name = "name", insertable = false, updatable = false)
private String userName;
}
- name : 매핑 대상의 컬럼명을 직접 입력한다.
- insertable : default는 true로 insert쿼리의 대상이 됐을 때 입력여부를 결정한다.
- updatable : default는 true로 update쿼리의 대상이 됐을때 변경 여부를 결정한다.
@Enumerated
자바의 Enum 타입을 필드 타입으로 사용할 때 입력한다.
@Entity
public class Member {
@Enumerated(EnumType.STRING)
private Status status;
}
파라미터로 DB에 저장될 속성을 결정할 수 있는데
- EnumType.ORDINAL : 디펄트로 Enum에 명시된 순서가 데이터베이스에 입력된다.
- EnumType.STRING : Enum의 필드명(이름)이 데이터베이스에 입력된다.
추가, 삭제 등으로 명시 순서는 언제든지 변경될 수 있으므로 STRING의 사용이 권장된다.
@Temporal
자바의 날짜 타입 (java.util.Date, java.util.Calendar)을 컬럼과 매핑할 때 사용한다.
@Entity
public class Member {
@Temporal(TemporalType.TIMESTAMP)
private Date joinDate;
}
- TemporalType.DATE : 날짜(년-일-월) 데이터가 데이터베이스(date)에 입력된다.
- TemporalType.TIME : 시간(시-분-초) 데이터가 데이터베이스(time)에 입력된다.
- TemporalType.TIMESTAMP : 날짜와 시간 데이터가 데이터베이스(timestamp)에 입력된다.
자바 8의 LocalDate, LocalDateTime 타입을 사용할 때는 하이버네이트가 지원하기 때문에 생략 가능하다.
@Lob
데이터베이스의 CLOB, BLOB 타입과 매핑된다.
@Entity
public class Member {
@Lob
private String content;
}
따로 속성은 없고 필드 타입이 문자면 CLOB, 나머지는 BLOB가 매핑된다.
- CLOB : String, char[], java.sql.CLOB
- BLOB : byte[], java.sql.BLOB
@Transient
필드 매핑을 하지않고, 데이터베이스에 저장, 조회를 하지않는다. 주로 메모리 상에서만 사용하고 싶을때 사용한다.
@Entity
public class Member {
@Transient
private String tempData;
}