[실전! 스프링 데이터 JPA] 벌크성 수정 쿼리

강신현·2022년 8월 9일
0

✅ @Modifying


영속성 컨텍스트를 무시하고 바로 db에 반영한다. 따라서 엔티티의 상태와 db에서의 엔티티 상태가 달라질 수 있다.
따라서 벌크성 쿼리를 실행한 이후 영속성 컨텍스트를 초기화해줘야 한다.

@Modifying(clearAutomatically = true)
  • MemberRepository
public interface MemberRepository extends JpaRepository<Member, Long> {

    // 벌크성 수정 쿼리
    @Modifying(clearAutomatically = true)
    @Query("update Member m set m.age = m.age + 1 where m.age >= :age")
    int bulkAgePlus(@Param("age") int age);
}
  • MemberRepositoryTest
@SpringBootTest
@Transactional
@Rollback(false)  // 롤백하지 않고 커밋하여 db에 반영 (test코드-현업 에서는 사용하면 안되지만 공부하는 단계에서만 사용)
class MemberRepositoryTest {
	@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);
    }

강의 출처

[인프런 - 김영한] 실전! 스프링 데이터 JPA

profile
땅콩의 모험 (server)

0개의 댓글