본문 바로가기
TIL

[TIL] Hibernate PK 생성 전략

by 쏘야.yap 2020. 10. 15.
728x90

JPA 에서의 PK 생성 방법

PK의 선정 방식에는 자연키(Natural Key), 대체키 (Surrogate Key) 두 가지 방식이 있다.

자연키 (Natural Key) 대체키 (Surrogate Key)
의미가 있는 컬럼을 PK로 사용함 의미가 없는, PK로 사용하기 위한 컬럼을 따로 생성함
연락처, 주민등록번호 등 Auto Increament, Sequence 등

 

JPA에서는 @Id와 함께 @GeneratedValue(sterategy) 어노테이션을 통해 대체키 방식을 제공하고 있다.

생성 전략 설명
GenerationType.AUTO JPA 구현체 (ex: Hibernate) 가 결정한다.
GenerationType.IDENTIFY 데이터베이스에 위임한다. (ex: MySQL : auto-increment)
GenerationType.SEQUENCE 데이터베이스 시퀀스를 활용하여 생성한다. (시퀀스를 지원하는 DBMS에서만 가능)
GenerationType.TABLE 키 생성 전용 테이블을 따로 만들어서 활용한다.

Hibernate5 에서의 AUTO PK 생성 과정

@GeneratedValue(strategy = GenerationType.AUTO) 일 때의 PK 생성 과정이다.

 

1. @Id 로 매핑된 Entity의 Field Type이 UUID 라면 UUID Generator를 통해 생성한다.

2. Numberal 한 다른 타입 (ex: Integer, Long) 이라면, IdentifierGenerator 사용 여부를 검사한다. (in. Hibernate 설정 파일)

3. 사용하고 있지 않으면, GenerationType.IDENTIFY 와 같이 처리한다.

4. 사용한다면, 해당 DB가 시퀀스를 지원하는지 확인하고, 지원하면 GenerationType.SEQUENCE 와 같이 처리한다.

5. 시퀀스를 지원하지 않는다면, GenerationType.TABLE 과 같이 처리한다.

- 이 때, 키 전용 테이블인 hibernate_sequence 테이블이 생성된다.

 

hibernate_sequence 테이블이 생성된다.

 


참고

- 하이버네이트는 어떻게 자동 키 생성 전략을 결정하는가