기본키 매핑 방식

직접 할당

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

자동 생성

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 기능을 제공한다.
  • 따라서 SEQUENCEIDENTITY는 사용하는 테이블에 의존한다.