인프런 커뮤니티 질문&답변

with_all님의 프로필 이미지
with_all

작성한 질문수

실전! Querydsl

벌크 연산에 대한 질문

작성

·

226

0

안녕하세요. <수정, 삭제 벌크 연산> 강의에서 다음 코드에 대한 질문이 있습니다.
 
 
@Test 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); } }
 
em.flush();를 하는 순간 영속성 컨텍스트에 있던 정보가 DB에 반영되게 되는데, 이렇게 되면 update(member)에서 수정한 DB 정보와 충돌이 발생되지 않나요? 따라서 member.username이 "비회원"으로 수정되지 못 하는 것 아닌지요?
 
읽어주셔서 감사드립니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. with_all님

JPA는 이런 문제를 예방하기 위해 JPQL을 실행하기 직전에 항상 영속성 컨텍스트를 flush합니다.

Querydsl을 통한 벌크 update도 결국 JPQL로 실행되기 때문에 결과적으로 먼저 flush가 발생한 다음에 update가 실행됩니다.

감사합니다.

with_all님의 프로필 이미지
with_all
질문자

답변 감사드립니다.

with_all님의 프로필 이미지
with_all

작성한 질문수

질문하기