오봉이와 함께하는 개발 블로그

Querydsl - 수정, 삭제 벌크 연산 본문

BE/JPA

Querydsl - 수정, 삭제 벌크 연산

오봉봉이 2022. 9. 19. 22:34
728x90

수정, 삭제 벌크 연산

JPA는 기본적으로 변경 감지(Dirty Checking)를 통해서 업데이트 처리 하는데, 변경 감지를 통한 업데이트는 업데이트 쿼리가 건당 하나씩 나가기 때문에 대량의 데이터를 변경할 때 사용하기 적합하지 않다.

쿼리 한번으로 대량 데이터 수정

@Test
void bulkUpdate() {
    // member 1 = 10 -> 비회원
    // member 2 = 20 -> 비회원
    long count = queryFactory
            .update(member)
            .set(member.username, "비회원")
            .where(member.age.lt(28))
            .execute();

    assertThat(count).isEqualTo(2);
}

기존 숫자에 1 더하기

@Test
void bulkAdd() {
    long count = queryFactory
            .update(member)
            .set(member.age, member.age.add(1))
            .execute();
}
update
    member
set
    age=age+?

참고로 곱하기는 multiply(x)다.

쿼리 한번으로 대량 데이터 삭제

@Test
void bulkDelete() {
    long count = queryFactory
            .delete(member)
            .where(member.age.gt(18))
            .execute();
}

주의

  • 참고 : https://5bong2-develop.tistory.com/256
    JPQL 배치와 마찬가지로, 영속성 컨텍스트에 있는 엔티티를 무시하고 실행되기 때문에 배치 쿼리를 실행하고 나면 영속성 컨텍스트를 초기화 하는 것이 안전하다.
인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90
Comments