기본키 매핑 방식#
직접 할당#
자동 생성#
IDENTITY#
- 기본키 생성을 데이터베이스에 위임한다.
- MySQL의 경우 AUTO_INCREMENT를 ID 컬럼에 옵션으로 붙여서 테이블을 생성한다.
IDENTITY
방식은 실제 Table에 Insert를 수행할때 ID가 할당된다.
- ID를 얻으려면 Table을 조회해야하는 비효율이 발생하는데 Insert와 동시에 JPA로 ID를 가져오기 위해
Statement.getGeneratedKeys()
를 사용하면 된다.
- 엔터티가 영속 상태가 되려면 식별자가 반드시 필요하기때문에
em.persist()
를 호출하는 즉시 Insert 쿼리문에 데이터베이스에 전달된다.
- 따라서
IDENTITY
방식은 쓰기 지연이 동작하지 않는다.
SEQUENCE#
- 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다. 당연히 시퀀스를 지원하는 데이터베이스에서만 사용할 수 있다.
- 오라클, PostgreSQL, DB2, H2에서 사용가능.
- JPA는 최적화를 위해 시퀀스를 Bulk로 DB에서 가져올 수 있는 기능을 제공한다. 단, 시퀀스 테이블의 숫자가 한번에 많이
TABLE#
- 키 생성 테이블을 사용한다.
- 키 생성용 테이블을 하나 만들어두고 마치 시퀀스처럼 사용하는 방법
- 테이블을 활용하는 방식이기때문에 모든 데이터베이스에서 사용할 수 있다.
AUTO#
- 위 3개 전략중 1개를 자동으로 선택한다.
- 개발 초기 단계에 DB가 정해지지 않았을때 사용하면 편리하다.
- AUTO를 통해 SEQUENCE나 TABLE 전략이 선택된 경우 키 생성용 테이블을 미리 만들어 두어야 한다.
- 스키마 자동생성 기능을 켜뒀다면 알아서 키 생성 테이블이 만들어 짐.
- 오라클 데이터베이스는 시퀀스를 제공하지만 MySQL은 시퀀스를 제공하지 않는다.
- MySQL은 기본 키 값을 자동으로 채워주는 AUTO_INCREMENT 기능을 제공한다.
- 따라서
SEQUENCE
나 IDENTITY
는 사용하는 테이블에 의존한다.