여러 건의 데이터(대량의 데이터)를 한번에 수정, 삭제하는 연산
현재 영속성 컨텍스트 상태
username | age |
member1 | 10 |
member2 | 20 |
member3 | 30 |
member4 | 40 |
28세 이하 회원의 이름 '비회원'으로 변경
long count = queryFactory
.update(member)
.set(member.username, "비회원")
.where(member.age.lt(28))
.execute();
실행 후 데이터베이스 상태
username | age |
member1 | 10 |
member2 | 20 |
비회원 | 30 |
비회원 | 40 |
영속성 컨텍스트 상태
username | age |
member1 | 10 |
member2 | 20 |
member3 | 30 |
member4 | 40 |
다시 Member를 조회할 경우 DB와 영속성 컨텍스트 사이 차이가 발생한다. 영속성 컨텍스트가 우선권을 가짐으로 수정된 결과가 아닌 영속성 컨텍스트에 올라가 있는 이전의 결과값이 반환되기 때문이다.
따라서 벌크연산 이후 영속성 컨텍스트를 초기화 해줘야 한다.
em.flush();
em.clear();
예1 ) 덧셈
long count = queryFactory
.update(member)
.set(member.age, member.age.add(1))
.execute();
예2 ) 뺄셈 - 메서드가 따로 없음
long count = queryFactory
.update(member)
.set(member.age, member.age.add(-1))
.execute();
예3 ) 곱셈
long count = queryFactory
.update(member)
.set(member.age, member.age.multiply(2))
.execute();
예4 ) 삭제
long count = queryFactory
.delete(member)
.where(member.age.gt(18))
.execute();
[SPRING] Querydsl | 스프링 데이터 JPA로 페이징하기 (0) | 2021.05.18 |
---|---|
[SPRING] Querydsl | 스프링 데이터 JPA와 Querydsl (0) | 2021.05.17 |
[SPRING] Querydsl | 동적쿼리 (0) | 2021.05.17 |
[SPRING] Querydsl | 프로젝션과 결과 반환 (0) | 2021.05.17 |
[SPRING] Querydsl | 문법(2) 조인연산 (0) | 2021.04.30 |
댓글 영역