벌크연산
- 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);