- 데이터베이스에 식별자 전략을 위임하는 방식이다.
- em.persist() 시점에서 INSERT 쿼리가 실행이 되며, 객체에 식별자 값이 할당된다.
- DB에 INSERT SQL을 실행한 이후에 id 값을 알 수 있다.
- 영속성 컨텍스트 관리를 위해서 PK값이 있어야 하는데, 1차 캐시 안에있는
@Id
값은 DB에 넣기 전까지는 세팅을 할 수 없다. - 그래서, IDENTITY 전략에서만 예외적으로 em.persist() 가 호출되는 시점에 바로 데이터베이스의 INSERT 쿼리를 실행한다.
- INSERT 쿼리가 실행된 이후 기본키인 식별자 값을 알 수 있다.
- 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트이다.
- 주로 Oracle, PostgreSQL, DB2, H2 데이터베이스에서 사용한다.
- em.persist() 시점에 sequence를 조회하여 식별자 값을 알 수 있다.
- tx.commit() 호출 시점에 INSERT 쿼리가 실행된다.
- 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략이다.
- 모든 데이터베이스에서 사용이 가능하지만, 테이블 조회를 사용해야하기 때문에 성능상의 문제가 있다.
- em.persist() 호출 시점에서 시퀀스 테이블을 조회해서 식별자 값을 알 수 있으며 그 다음값을 이용할 수 있도록 업데이트까지 진행한다.
- tx.commit() 호출 시점에 INSERT 쿼리가 실행된다.