Skip to content

Latest commit

 

History

History
24 lines (18 loc) · 1.54 KB

04.md

File metadata and controls

24 lines (18 loc) · 1.54 KB

JPA 식별자 전략

@Id(strategy = IDENTITY)

  • 데이터베이스에 식별자 전략을 위임하는 방식이다.
  • em.persist() 시점에서 INSERT 쿼리가 실행이 되며, 객체에 식별자 값이 할당된다.
    • DB에 INSERT SQL을 실행한 이후에 id 값을 알 수 있다.
    • 영속성 컨텍스트 관리를 위해서 PK값이 있어야 하는데, 1차 캐시 안에있는 @Id 값은 DB에 넣기 전까지는 세팅을 할 수 없다.
    • 그래서, IDENTITY 전략에서만 예외적으로 em.persist() 가 호출되는 시점에 바로 데이터베이스의 INSERT 쿼리를 실행한다.
  • INSERT 쿼리가 실행된 이후 기본키인 식별자 값을 알 수 있다.

@Id(strategy = SEQUENCE)

  • 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트이다.
  • 주로 Oracle, PostgreSQL, DB2, H2 데이터베이스에서 사용한다.
  • em.persist() 시점에 sequence를 조회하여 식별자 값을 알 수 있다.
  • tx.commit() 호출 시점에 INSERT 쿼리가 실행된다.

@Id(strategy = TABLE)

  • 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략이다.
  • 모든 데이터베이스에서 사용이 가능하지만, 테이블 조회를 사용해야하기 때문에 성능상의 문제가 있다.
  • em.persist() 호출 시점에서 시퀀스 테이블을 조회해서 식별자 값을 알 수 있으며 그 다음값을 이용할 수 있도록 업데이트까지 진행한다.
  • tx.commit() 호출 시점에 INSERT 쿼리가 실행된다.