IDENTITY전략 - 특징
- 기본키 생성을 데이터베이스에 위임
- 주로 MYSQL, PostgreSQL, SQL Server, DB2에서 사용 (예: MySQL의 auto_increment)
- jpa는 보통 트랜잭션 커밋 시점에 insert쿼리를 실행한 이후에 id값을 알 수 있다.
- IDENTITY전략은 em.persist()시점에 즉시 insert쿼리를 실행하고 db에서 식별자를 조회한다.
- 전 블로그에 적었던 한번에 모아서 insert를 하는게 IDENTITY전략에서는 불가능 하다.
@GeneratedValue(strategy = GenerationType.IDENTITY)
설정해주고
final Member member = new Member();
member.setUsername("B");
System.out.println("==================");
em.persist(member);
System.out.println("member.id = " + member.getId());
System.out.println("==================");
tx.commit();
실행해보면
==================
Hibernate:
/* insert hellojpa.Member
*/ insert
into
Member
(id, name)
values
(null, ?)
member.id = 1
==================
커밋전에 insert쿼리가 실행되고 id값을 db에서 바로 조회한다.
하지만 @GeneratedValue(strategy = GenerationType) 전략을
@GeneratedValue(strategy = GenerationType.SEQUENCE) 같은 걸로 바꾸면
커밋하는 시점에 insert쿼리가 날라간다. 이미 id값을 알고 있기 때문.
em.persist()를 해주면 id값이 세팅되고 영속상태가 된다.