JPA/Querydsl
Querydsl 09 - 수정, 삭제 배치 쿼리
킹차니
2022. 1. 20. 11:46
바로 코드로 보자.
//수정
@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를 바탕으로 정리하였습니다.