인지용

JPA - 기본 키 매핑 본문

JPA & Querydsl

JPA - 기본 키 매핑

인지용 2021. 11. 4. 17:02

 

기본키를 @Id 어노테이션만 사용해서

애플리케이션에서 직접 할당하는 대신에 

DB에서 생성해주는 값을 사용하려면 어떻게 매핑해야할까

 

예를들어

오라클의 시퀀스 오브젝트,

MySQL의 AUTO_INCREMENT

 

 

기본키란 ?

영속성 컨텍스트에 저장할 키 값으로 사용하기 위해서 필수적인 키이다.

 

 

JPA가 제공하는 데이터베이스 기본 키 생성 전략 종류

직접 할당 : 기본 키를 애플리케이션에서 직접 할당한다.

자동 생성 :

- IDENTITY : 기본 키 생성을 데이터베이스에 위임한다.

- SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다.

- TABLE : 키 생성 테이블을 사용한다.

 

 

IDENTITY 전략 

주로 MySQL에서 사용한다

IDENTITY 전략은 데이터베이스에 INSERT한  후에

기본 키값을 조회할 수 있다.

 

이 전략을 사용하면 JPA는 기본 키 값을 얻어오기 위해 DB를 추가로 조회한다.

 

( 엔티티에 식별자 값을 할당하려면 JPA는 추가로 DB를 조회해야 하는데

  JDBC3에 추가된 Statement.getGeneratedKeys()를 사용하면

  데이터를 저장하면서 동시에 생성된 기본 키 값도 얻어올 수 있다.

  하이버네이트는 이 메소드를 사용해서 DB와 한번만 통신한다. )

 

 

( 난 mysql을 쓰니까 일단 이것만 적어놔야겠다 ㅋㅋ )

 

자동 생성 전략이 다양한 이유

데이터베이스 벤더마다 지원하는 방식이 다르기 때문이다.

오라클은 시퀀스 제공 o 

MySQL은 시퀀스 제공 x

대신 MySQL은 AUTO_INCREMENT 기능을 제공

 

결론

따라서 SEQUENCE나 AUTO_INCREMENT 전략은

사용하는 데이터베이스에 의존한다.

 

 

출처

자바 ORM 표준 JPA 프로그래밍

'JPA & Querydsl' 카테고리의 다른 글

jpa 사소한 정보들  (0) 2022.01.03
JPA 엔티티 매핑 - 대표적 어노테이션  (0) 2021.11.03