필드와 컬럼 매핑
요구사항
- 회원은 일반 회원과 관리자로 구분
- 회원 가입일, 수정일 필요
- 회원을 설명할 수 있는 필드가 있어야하고 길이 제한이 없어야한다.
package hellojpa;
public enum RoleType {
USER, ADMIN
}
package hellojpa;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@Entity
public class Member {
@Id
private Long id;
@Column(name = "name") //실제 DB 컬럼명
private String username;
private Integer age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
//생성일
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
//수정일
private Date lastModifiedDate;
@Lob
private String description;
}
매핑 어노테이션
hibernate.hbm2ddl.auto
어노테이션 설명
@Column | 컬럼 매핑 |
@Temporal | 날짜 타입 매핑 |
@Enumerated | enum 타입 매핑 |
@Lob | BLOB, CLOB 매핑 |
@Transient | 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) |
@Column
속성 | 설명 | 기본값 |
name | 필드와 매핑할 테이블의 컬럼 이름 | 객체의 필드 이름 |
insertable, updatable |
등록, 변경 가능 여부 | true |
nullable(DDL) | null 값의 허용 여부를 설정한다. false -> DDL 생성 시에 NOT NULL 제약조건 이 붙는다. |
|
unique(DDL) | @Table의 uniqueConstraints와 같지만, 한 컬럼에 간단히 유니크 제약 조건을 걸 때 사용 |
|
columnDefinition(DDL) | 필드의 자바 타입, 방언 정보를 활용하여 데이터 베이스 컬럼 정보를 직접 줄 수 있다. |
|
length(DDL) | 문자 길이 제약 조건, String 에만 사용 | 255 |
precision, scale(DDL) | BigDecimal 타입에서 사용 precision은 소수점을 포함한 전체 자리수를 scale은 소수의 자릿수이다. double, float타입에는 적용되지 않고 아주 큰 숫자나 정밀한 소수를 다루어야 할때만 사용한다. |
precision = 19, scale = 2 |
@Enumerated
- 자바 enum 타입을 매핑할 때 사용
- 💡 !!!!주의!!!! ORDINAL 사용X
- 예를들어 요구사항이 늘어나서 코드가 변경되어 순서가 바뀌면 DB값은 변경되지 않고 꼬여버린다.
속성 | 설명 | 기본값 |
value | EnumType.ORDINAL: enum 순서를 데이터베이스에 저장 EnumType.STRING: enum 이름을 데이터베이스에 저장 |
EnumType.ORDINAL |
@Temporal
- LocalDate, LocalDateTime을 사용할 때는 생략 가능(최신 하이버네이트 지원)
- 굳이 쓸 필요가 없어진 상황이다!!
속성 설명 기본
속성 | 설명 | 기본값 |
value | TemporalType.DATE: 날짜, 데이터베이스 date 타입과 매핑 (예: 2013–10–11) TemporalType.TIME: 시간, 데이터베이스 time 타입과 매핑 (예: 11:11:11) TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이 스 timestamp 타입과 매핑(예: 2013–10–11 11:11:11) |
@Lob
- DB에 대용량의 데이터를 저장할 필요성이 있을 경우 LOB을 사용한다.
- 데이터베이스 BLOB, CLOB 타입과 매핑
- @Lob에는 지정할 수 있는 속성이 없다.
- 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
- CLOB: String, char[], java.sql.CLOB
- BLOB: byte[], java.sql. BLOB
@Transient
- 필드 매핑X
- 데이터 베이스에 저장X, 조회X
- 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용
- ex
- @Transient private Integer temp;
'DB > JPA' 카테고리의 다른 글
실전 예제 - 요구사항 분석과 기본 매핑 (0) | 2023.01.04 |
---|---|
기본 키 매핑 (0) | 2023.01.03 |
데이터 베이스 스키마 자동생성 (0) | 2022.12.30 |
객체와 테이블 매핑 (0) | 2022.12.30 |
준영속 상태 (0) | 2022.12.30 |