오봉이와 함께하는 개발 블로그
Querydsl - 수정, 삭제 벌크 연산 본문
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
'BE > JPA' 카테고리의 다른 글
Querydsl - 순수 JPA와 Querydsl (0) | 2022.09.20 |
---|---|
Querydsl - SQL Function 호출하기 (0) | 2022.09.19 |
Querydsl - 동적 쿼리(Where 다중 파라미터 사용) (0) | 2022.09.18 |
Querydsl - 동적 쿼리(BooleanBuilder) (0) | 2022.09.18 |
Querydsl - 프로젝션 결과 반환 (@QueryProjection) (0) | 2022.09.18 |
Comments