JPA/JPA

insert, update, delete 주의 사항(쿼리 실행 순서)

lovineff 2020. 11. 11. 14:08

쿼리 동작 우선 순위

Hibernate는 영속성 컨텍스트에 등록된 쿼리에 대해 아래와 같은 우선 순위에 맞춰 쿼리가 실행되도록 되어있다.

로직을 다음과 같이 구현하는 경우 flush를 반드시 사용해야 원하는 대로 동작한다.

  • find, remove, update, insert 순으로 로직이 구현된 경우 > Hibernate는 find, update, insert, remove 순서로 쿼리를 실행하므로 원하지 않는 결과가 발생한다.

쿼리 실행 순서

1. Inserts, in the order they were performed
2. Updates
3. Deletion of collection elements
4. Insertion of collection elements
5. Deletes, in the order they were performed

 

추가 내용

하이버네이트는 select 를 하기전에 select 대상 엔티티에 대해 flush() 를 먼저 호출하므로 작업 마지막에 flush()를 호출해도 원하는대로 동작하지 않는다.

/**
 * detect in-memory changes, determine if the changes are to tables
 * named in the query and, if so, complete execution the flush
 */

출처 : woowabros.github.io/experience/2020/09/23/hibernate-batch.html

 

'JPA > JPA' 카테고리의 다른 글

JPA Enum Mapping  (0) 2021.03.15
조건문 매칭  (0) 2020.12.01
SAVE 메서드 주의 사항  (0) 2020.06.09
사용자 정의 리포지토리 구현  (0) 2020.06.09
페이징 처리  (0) 2020.06.09