@GeneratedValue
어노테이션은 JPA를 사용하는 경우 엔티티 클래스의 Primary Key값을 생성하는 방식을 지정하는 데 사용된다.
@GeneratedValue의 옵션(생성 전략)
AUTO
:
- 벤더에 따라 자동으로 기본키 생성 방식을 선택
IDENTITY
:
- id값을 따로 할당하지 않아도 데이터베이스가 자동으로 AUTO_INCREMENT를 하여 기본키 생성
- em.persist() 시점에 쓰기 지연을 하지않고 바로 쿼리를 DB에 날려 데이터를 등록하고 식별자를 리턴받아 1차 캐시에 엔티티 등록
- 주로 Mysql에서 사용
SEQUENCE
:
- 데이터베이스의 시퀀스(sequence)를 사용하여 기본키 생성
- @SequenceGenerator가 필요
- 주로 Oracle에서 사용
@SequenceGenerator(
name = "customer_seq",
sequenceName = "customer_sequence",
allocationSize = 1
)
-
TABLE
:
- 데이터베이스 테이블을 사용하여 기본키 생성
- 데이터베이스가 지원하지 않을 때나 데이터베이스 독립적인 방법으로 기본키를 생성할 때 사용
- @TableGenerator가 필요
-
SEQUENCE-GENERATOR
:
- 사용자가 정의한 시퀀스를 사용하여 기본키 생성
TABLE-GENERATOR
:
- 사용자가 정의한 테이블을 사용하여 기본키 생성