인프런 커뮤니티 질문&답변
벌크 연산에 대한 질문
작성
·
285
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가 실행됩니다.
감사합니다.






답변 감사드립니다.