[QueryDsl] 벌크 연산 - Update, Delete

DreamJJW·2024년 2월 21일
0

공부 노트

목록 보기
18/18

벌크 연산(Bulk Operation)이란

update 쿼리는 각 데이터를 하나씩 갱신한다.
즉, 만약 조건(where)에 부합하는 데이터가 많게는 수만개부터 수십만개가 있다면
그 수 만큼의 update문이 일일히 날아가게 된다.

즉, 비효율적이기 때문에 한번에 대량의 데이터를 일괄적으로 수정, 삭제할 수 있는 것이
벌크 연산이다.

public void bulkUpdate() {
	long count = queryFactory
    .update(member)
    .set(member.username, "비회원")
    .where(member.age.lt(28))
    .execute();
}


// long count는 쿼리에 영향을 받은 row수이다.

벌크 연산에서 주의해야할 점 !!

벌크 연산은 영속성 컨텍스트를 무시하고 다이렉트로 db로 쿼리를 보내기 때문에, db에는
반영된 변경사항이 영속성 컨텍스트에는 반영이 되지 않게 된다.

그렇기에 벌크 연산을 실행한 후에 영속성 컨텍스트를 초기화해주는 것이 좋다!!

em.flush();
em.clear();

벌크 연산 - 삭제

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

벌크 연산 - 데이터 조정

public void bulkAdd() }
	long count = queryFactory
    	.update(member)
        .set(member.age, member.age.multiply(2))
        .execute();
}

// !!! 빼기 및 나누기를 하고 싶다면 add(-1)을 하거나 mul(1/2)을 하면 된다!!!
profile
간절한 사람

0개의 댓글