본 문서는 인프런의 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의를 공부하며 작성한 개인 노트입니다.
@Entity
, @Table
@Column
@Id
@ManyToOne
, @JoinColumn
@Entity가 붙은 클래스 > JPA가 관리하는 엔티티
name
@Entity(name = "")
@Table - 엔티티와 매핑할 테이블 지정
name
- 매핑할 테이블 이름catalog
- 디비 카탈로그 매핑schema
- 디비 스키마 매핑uniqueConstraints
(DDL) - DDL 생성 시에 유니크 제약 조건 생성<property name="hibernate.hbm2ddl.auto" value=""/>
create
- 기존 테이블 삭제 후 다시 생성create-drop
- create + 종료시점에 테이블 DROPupdate
- 변경분만 반영validate
- 엔티티와 테이블이 정상 매핑되었는지만 확인none
@Column
- 컬럼 매핑@Temporal
- 날짜 타입 매핑@Temporal(TemporalType.TIMESTAMP)
- 날짜 타입 (Date, Time, TimeStamp)@Enumerated
- enum 타입 매핑@Lob
- BLOB, CLOB 매핑@Transient
- 특정 필드를 컬럼에 매핑하지 않음 속성
name
- 필드와 매핑할 테이블의 컬럼 이름insertable
, updatable
- 등록/변경 가능 여부nullable
(DDL) - null 값의 허용 여부 설정unique
(DDL) columnDefinition
(DDL) - 디비 컬럼 정보를 직접 줌length
(DDL) - 문자 길이 제약조건precision
, scale
(DDL)Enum 타입을 매핑할 때 사용
속성
value
날짜 타입 매핑 시 사용
속성
value
TemporalType.DATE
- 날짜, 디비 date 타입과 매핑TemporalType.TIME
- 시간, 디비 time 타입과 매핑TemporalType.TIMESTAMP
- 날짜와 시간, 디비 timestamp 타입과 매핑디비 BLOB & CLOB 타입과 매핑
필드 매핑 X
@Id
, @GeneratedValue
@Id @GeneratedValue
private Long id;
@GeneratedValue(strategy = GenerationType.IDENTITY)
IDENTITY
- 기본 키 생성을 디비에 위임IDENTITY
전략 사용 시에는 em.persist()
시점에 즉시 INSERT SQL 실행 & 디비에서 식별자 조회IDENTITY
는 모아서 INSERT하는 것은 불가능 > 큰 성능 차는 없음SEQUENCE
- 디비 시퀀스 오브젝트 사용em.persist()
를 실행하려면 pk가 필요하기 때문에 먼저 시퀀스 다음값을 가져옴@SequenceGenerator
필요@Entity
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ", // 매핑할 디비 시퀀스 이름
initialValue = 1
allocationSize = 1)
public class Member {
@Id
@GeneratedVlaue(strategy = GenerationType.SEQUENCE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
}
@SequenceGenerator
속성name
- 식별자 생성기 이름sequenceName
- 디비에 등록되어 있는 시퀀스 이름initialValue
- 시퀀스 DDL 생성시 처음 시작하는 수 지정allocationSize
- 시퀀스 한 번 호출에 증가하는 수catalog
, schema
- 디비 카탈로그/스키마 이름TABLE
- 키 생성용 테이블 사용@TableGenerator (
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = "MEMBER_SEQ", allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
}
@TableGenerator
속성name
- 식별자 생성기 이름table
- 키 생성 테이블명pkColumnName
- 시퀀스 컬럼명initialValue
- 초기값allocationSize
- 시퀀스 한 번 호출에 증가하는 수catalog
, schema
- 디비 카탈로그/스키마 이름uniqueConstraints
(DDL) - 유니크 제약 조건 지정AUTO
- 방언에 따라 자동 지정