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 테이블이 생성된다.
참고
'TIL' 카테고리의 다른 글
Jira automation - custom field 조작하기 (0) | 2022.05.11 |
---|---|
[TIL] 시간 복잡도와 알고리즘 문제 풀기 (0) | 2020.10.28 |
[TIL] SOMA CAMP 1일차 - 최백준 알고리즘 (0) | 2020.10.14 |
[TIL] Spring boot - MySQL 연동 삽질 (0) | 2020.10.13 |