파게로그
실습 3 (Mapping annotations) 본문
4@Column
name: 필드와 매핑할 테이블의 컬럼 이름
insertable, updatable: 읽기 전용(예를 들어 insertable=false라고 하면 DB의 갱신이 이루어지지 않음)
nullable: null 허용 여부 결정, DDL 생성 시 사용
unique: 유니크 제약 조건, DDL 생성 시 사용
columnDefinition, length, precision, scale: DDL 생성 시 사용
length: 데이터의 길이 설정, DDL 생성 시 사용
@Temporal
날짜 타입 매핑
@Temporal(TemporalType.DATE) private Date date; // 날짜
@Temporal(TemporalType.TIME) private Date time; // 시간
@Temporal(TemporalType.TIMESTAMP) private Date timestamp; // 날짜와 시간
java.util.Date, java.util.Calendar에만 사용할 수 있고, java.sql.Date에는 사용이 불가능하다
@Enumerated
열거형 매핑
@Enumerated(EnumType.ORDINAL) // 사용하면 골치가 아픔...
@Enumerated(EnumType.STRING) // 권장
@Lob
CLOB, BLOB 매핑
CLOB: String, char[], java.sql.CLOB
BLOB: byte[], java.sql.BLOB
@Lob // String 타입에 쓰면 CLOB이 됨
private String lobString;
@Lob // Byte[] 타입에 쓰면 BLOB이 됨
private byte[] lobByte;
@Transient
"이 필드는 객체에는 넣어두고 싶은데, DB에 매핑하고 싶지는 않아"
애플리케이션에서 DB에 저장하지 않는 필드
package helloJpa.entity;
import javax.persistence.*;
import java.util.Date;
@Entity
public class Member {
enum MemberType { DIAMOND, GOLD, SILVER, BRONZE }
@Id
private long id;
@Column(name="name")
private String name;
private int age;
@Temporal(TemporalType.TIMESTAMP)
private Date regDate;
// @Enumerated(EnumType.ORDINAL) // DB에 0, 1, 2, ... 이렇게 숫자로 들어간다. enum 변경 때 곤란하다.
@Enumerated(EnumType.STRING) // DB에 DIAMOND, GOLD, ... 이렇게 글자 그대로 들어간다.
private MemberType memberType;
// getter and setters
}
식별자 매핑
@Id (직접 매핑)
- IDENTITY: DB에 위임. MySQL
- SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용. ORACLE
@SequenceGenerator 필요
- TABLE: 키 생성용 테이블 사용. 모든 DB에서 사용
@TableGenerator 필요
- AUTO: 방언에 따라 자동 지정. 기본값
ex) @Id @GeneratedValue(strategy = GenerationType.AUTO)
이렇게 하고 persist하는 객체에 대해서 setId()를 직접 하지 않으면, DB가 알아서 해준다.
권장하는 식별자 전략
기본 키 제약 조건: null 아님, 유일, 변하면 안된다
미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자.
권장: Long + 대체키(비즈니스와 관계없는 것) + 키 생성전략 사용 (비즈니스 키 조합을 권장하는 사람들도 있음)
'콤퓨타 왕기초 > JPA' 카테고리의 다른 글
JPA 내부 구조 (0) | 2021.06.02 |
---|---|
연관관계 매핑 (0) | 2021.05.28 |
[실습] Mapping to DDL (0) | 2021.05.27 |
[실습] JPA in Maven project (0) | 2021.05.27 |
Why JPA? (0) | 2021.05.26 |