[JPA] 기본키 매핑 전략
본 포스트는 Inflearn
의 김영한님 강의를 바탕으로 작성했습니다.
기본 키 매핑 전략
IDENTITY
: 데이터베이스에 위임하는 전략- MYSQL에서 사용됨.
- AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID값을 알 수 있기 때문에 em.persist() 시점에 바로 INSERT SQL을 실행하고 ID를 가져온다.
@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
SEQUENCE
: 데이터베이스 시퀀스 오브젝트 사용- 오라클에서 사용
- 데이터베이스 시퀀스란 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트를 뜻한다.
@Entity
@SequenceGenerator(
name = “ITEM_SEQ_GENERATOR",
sequenceName = “ITEM_SEQ",
initialValue = 1, allocationSize = 1)
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
private Long id;
Table
: 키 생성용 테이블 사용, 모든 DB에 적용 가능- 키 생성 전용 테이블을 하나 만들고 데이터베이스 시퀀스를 흉내내는 전략
- 모든 데이터베이스에 적용이 가능하지만 성능이 좋지 않다.
Object
@Entity
@TableGenerator(
name = "ITEM_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = “ITEM_SEQ", allocationSize = 1)
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "ITEM_SEQ_GENERATOR")
private Long id;
Table
create table MY_SEQUENCES (
sequence_name varchar(255) not null,
next_val bigint,
primary key ( sequence_name )
)
AUTO
: 방언에 따라 자동 지정, 기본 값
실무 사용 가이드
- 기본키는 Long Type + 대체키 + 키 생성전략을 활용하자
참고 사이트 출처
- https://www.inflearn.com/course/ORM-JPA-Basic/dashboard