본문 바로가기
JPA/Querydsl

Querydsl 09 - 수정, 삭제 배치 쿼리

by 킹차니 2022. 1. 20.

바로 코드로 보자.

//수정
@Test
void bulkUpdate() {
    //count는 영향을 받은 회원 수
    long count = queryFactory.update(member)
            .set(member.username, "비회원")
            .where(member.age.lt(28)).execute();

    //영속성 컨텍스트 비우기
    em.flush();
    em.clear();
}

//더하기
@Test
void bulkAdd() {
    queryFactory.update(member)
            .set(member.age, member.age.add(1))
            .execute();

    //영속성 컨텍스트 비우기
    em.flush();
    em.clear();
}

//삭제
@Test
void bulkDelete() {
    queryFactory.delete(member)
            .where(member.age.gt(18))
            .execute();

    //영속성 컨텍스트 비우기
    em.flush();
    em.clear();
}

모든 각각의 수정, 삭제 쿼리를 실핼한 뒤

em.flush()

em.clear()

로 영속성 컨텍스트를 비워주는 것을 알 수 있다. JPQL의 배치와 마찬가지로 영속성 컨텍스트에 있는 엔티티를 무시하고 실행되기 때문에 배치 쿼리를 실행하고 나면 영속성 컨텍스트를 초기화하는 것이 안전하다.

 

 

 

 

 

김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.