JPA - 기본 키 매핑
기본키를 @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 프로그래밍