- 직접 할당 : 기본 키를 어플리케이션에서
@Id
로 직접 할당한다.- 자동 생성
IDENTITY
: 기본 키 생성을 DB에 위임한다.DB저장->영속성 저장
SEQUENCE
: DB 시퀀스를 사용해서 기본 키를 할당한다.영속성 저장->DB저장
TABLE
: 키 생성 테이블을 사용한다.
DB마다 기본 키를 생성하는 방식이 서로 다르다.
따라서 어떤 DB를 사용하는가에 따라서 선택할 수 있는 자동 생성 전략이 다르다.
@Id
로 매핑한다.em.persist()
전에 직접 기본 키를 할당해야한다.Member member = new Member();
member.setId("1");
em.persist(member);
@GeneratedValue(strategy = GenerationType.IDENTITY)
AUTO_INCREMENT
em.persist()
를 호출하는 즉시 Insert SQL이 전달되므로 일반적인 쓰기 지연이 동작하지 않는다.// 1. 시퀀스 생성
CREATE SEQUENCE BOARD_SEQ START WITH 1 INCREMENT BY 1;
@Entity
@SequenceGenerator ( // 2. 시퀀스 제너레이터 생성
name="BOARD_SEQ_GENERATOR",
sequenceName = "BOARD_SEQ",
initialValue = 1,
allocationSize = 1)
public class Board {
@Id // 3. 기본키와 시퀀스 제너레이터 매핑
@GeneratedValue(strategy = GeneratedType.SEQUENCE,
generator = "BOARD_SEQ_GENERATOR")
private Long id;
- 시퀀스 생성
- 시퀀스 제너레이터 생성
- 기본키와 시퀀스 제너레이터 매핑
SequenceGerator.allocationSize
의 기본 값이 50임에 주의한다!키 생성 전용 테이블을 하나 만들고, 이름과 값으로 사용할 컬럼을 만들어 DB의 시퀀스를 흉내내는 전략이다.
따라서, 내부 동작 또한 시퀀스 전략과 같다.
또한, 테이블을 만들어서 사용하기 때문에, DB 종류에 상관없이 모두 사용 가능하다.
알아서 JPA가 DB 방언에 따라서 설정해준다.