[JPA] 벌크연산

Hyunho·2021년 6월 15일
0

벌크연산

  • insert, update, delete할때 단건이 아닌 다건으로 한번에 처리하는 쿼리
  • JPA에서 단건 UPDATE같은 경우에는 Dirty Checking을 통해서 수행

주의점

  • 벌크 연산 쿼리는 에ㅐㄴ티티 매니저가 영속성 컨텍스트에 변경된 내용을 업데이트 하지 않고 바로 데이터에 스스로 보내진다
  • 벌크연산 후에 실제 데이터베이스와 영속성 컨텍스트의 엔티티 정복 다를수 있다.
    • 벌크연산 후에는 flush()와 clear()를 해줘서 이후의 로직에 대해 다시 영속성 상태가 되도록 해야한다.

스프링 데이터 JPA 벌크연산

  • @Modifying
    • INSERT, UPDATE, DELETE에 모두 적용되며 없을 경우 SELECT로 인식하기 때문에 에러가 발생
  • 스프링 데이터 JPA에서는 flushAutomatically, crearAutomatically속성으로 flush()와 clear()를 자동으로 수행하게 할 수 있다.
@Modifying(flushAutomatically = true, clearAutomatically = true)
@Query("update Member m set m.age = m.age + 1 where m.age >= :age")
int bulkAgePlus(@Param("age") int age);
profile
hyunho

0개의 댓글