JPA
[Querydsl] 수정, 삭제 벌크 연산
주씨.
2024. 4. 20. 17:57
728x90
# 벌크 연산
- 쿼리 한 번으로 대량 데이터 수정
# 나이가 28 미만인 회원의 이름을 비회원으로 지정
@Test
@Commit
public void bulkUpdate(){
long count = queryFactory
.update(member)
.set(member.username, "비회원")
.where(member.age.lt(28))
.execute();
em.flush();
em.clear();
List<Member> result = queryFactory
.selectFrom(member)
.fetch();
for (Member member1 : result){
System.out.println("member1 = " + member1);
}
}
- 벌크 연산이 수행되는 순간 영속성 컨텍스트와 DB 는 일치하지 않는다.
- 영속성 컨텍스트에 있는 엔티티를 무시하고 실행되기 때문에, 배치 쿼리를 실행하고 나면 영속성 컨텍스트를 초기화하는 것이 안전하다
# 모든 회원의 나이를 1 더하라
/**
* 모든 회원의 나이를 1 더하라
*/
public void bulkAdd(){
long count = queryFactory
.update(member)
.set(member.age, member.age.add(1))
.execute();
}
- 곱하기는 multiply(x)
# 나이가 18 이상인 모든 회원을 삭제하라
public void bulkDelete(){
long count = queryFactory
.delete(member)
.where(member.age.goe(18))
.execute();
}
# 필수!!
em.flush();
em.clear();