본문 바로가기

Spring boot/스프링 데이터 JPA

[spring boot] 벌크성 수정 쿼리

// member repository
@Modifying(clearAutomatically = true)
@Query("update Member m set m.age = m.age + 1 where m.age >= :age")
int bulkAgePlus(@Param("age") int age);
  • @Modifying :  jpa에서 .excuteUpdate와 동일, update 쿼리는 @Modifying 필수
  • 벌크성 쿼리 실행 후 영속성 컨텍스트 초기화: @Modifying(clearAutomatically = true) (기본값은 false ) 따로 flush, clear 안 해도 됨.
  • 반환타입 : int

 

// test
@Test
public void bulkUpdate() throws Exception {
 	//given
	 memberRepository.save(new Member("member1", 10));
	 memberRepository.save(new Member("member2", 19));
	 memberRepository.save(new Member("member3", 20));
 	memberRepository.save(new Member("member4", 21));
 	memberRepository.save(new Member("member5", 40));
 
 	//when
 	int resultCount = memberRepository.bulkAgePlus(20);
 
 	//then
 	assertThat(resultCount).isEqualTo(3);
}