반응형
벌크 연산
- 한 번에 여러 데이터를 수정 혹은 삭제하는 것을 의미합니다.
- 영속성 컨텍스트를 무시하고 바로 DB에 반영합니다.
- 영속성 컨텍스트와 DB의 상태가 달라지게 된다는 의미
- 벌크 연산으로 대량의 데이터를 수정한 후 fetch()로 데이터를 조회했을 때 변경된 DB에서 값이 아닌 이미 영속성 컨텍스트에 존재하는 데이터를 가져오는 문제가 발생합니다.
- 벌크 연산 이후 변경된 값을 가져오기 위해 EntityManager.flush()와 EntityManager.clear()를 통해서 영속성 컨텍스트 값을 버려야 합니다.
대량 데이터 수정
// 20살보다 어리면 비회원으로 변경하기
long count = jpaQueryFactory
.update(member)
.set(member.username, "비회원")
.where(member.age.lt(19))
.execute();
// 모든 회원 나이 1씩 더하기
long count = jpaQueryFactory
.update(member)
.set(member.age, member.age.add(1))
.execute();
대량 데이터 삭제
long count = queryFactory
.delete(member)
.where(member.age.lt(19))
.execute();
반응형
'Spring Data > Query DSL' 카테고리의 다른 글
QueryDSL 페이징 처리 (0) | 2023.01.19 |
---|---|
QueryDSL Spring Data JPA + 동적 쿼리 (0) | 2023.01.18 |
QueryDSL 동적 쿼리 (0) | 2023.01.16 |
QueryDSL DTO에 값 담기 (0) | 2023.01.15 |
QueryDSL 문법 (0) | 2023.01.15 |