JPA

IDENTITY전략

lby132 2022. 10. 17. 22:35

 

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값이 세팅되고 영속상태가 된다. 

'JPA' 카테고리의 다른 글

Embedded Type  (0) 2022.10.19
테이블 전략  (0) 2022.10.18
mappedBy  (0) 2022.10.18
영속 컨텍스트  (1) 2022.10.15
JPA 준비  (1) 2022.10.14