참치코더의 꿈 메모장

JPA / IDENTITY 전략 VS SEQUENCE 전략 비교 정리 본문

JPA

JPA / IDENTITY 전략 VS SEQUENCE 전략 비교 정리

참치깡 2025. 10. 2. 20:41
728x90

 

IDENTITY 전략

 

- DB(AUTO_INCREMENT)가 insert 실행 시점에 PK를 만들어줌

- 따라서 em.persist(entity) 하면 JPA는 즉시 insert 쿼리를 날림 (flush 강제 발생)

- 그 insert 결과로 생성된 PK를 가져와서 엔티티 객체에 채워 넣음

 

-> 이러한 이유들 때문에 배치 insert(모여서 한 번에 쓰기)가 잘 안 됨.

-> JPA 1차 캐시나 영속성 컨텍스트에서 ID를 바로 알아야 하니까 insert를 바로 실행 한다.

 

SEQUENCE 전략

 

- 오라클 / PostgreSQL처럼 DB가 시퀀스 객체를 지원하는 경우 사용할 수 있다.

- em.persist(entity) 하면 insert 전에 먼저 시퀀스에서 PK를 뽑아온다.

- JPA가 그 값을 엔티티에 할당한다. 

- 그리고 나서 insert SQL을 모아두고, flush 시점에 한 번에 insert할 수 있다.

 

-> 즉, ID는 persist 시점에 미리 확보하고, 실제 insert는 flush 시점에 모아서 실행이 가능하다.

-> 그래서 batch insert 최적화가 가능하고, IDENTITY보다 효율적이다.

 

flush 발생 시점

 

1. 트랜잭션 commit 할 때 

2. JPQL 쿼리 실행 전

3. 명시적으로 em.flush() 호출 시 

 

 

 

 

728x90
Comments