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

a79007714님의 프로필 이미지
a79007714

작성한 질문수

실전! Querydsl

수정, 삭제 벌크 연산

벌크 연산시 flush 호출 여부에 대해 궁금한 점이 있습니다.

작성

·

237

2

안녕하세요. 선생님 벌크연산 강의 중에 질문이 있습니다.

JPA 프로그래밍 책에서 JPQL 실행 시 플러시가 자동 호출되어서 영속성 컨텍스트에 있는 쿼리문이 db에 동기화 되는걸로 알고 있는데 벌크 연산은 update 쿼리이기 때문에 자동으로 플러시가 호출되지 않아서 강제로 플러시를 호출해줘야 되는건가요?   이 부분에 혼동이 있어서 질문드립니다.

답변 1

4

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

안녕하세요 a79007714님

혹시 강의 어디 부분인지 이야기 부탁드려요^^ (몇분인지 말씀해주시면 좋습니다^^!)

참고로 update도 JPQL이기 때문에 플러시가 호출은 됩니다.

그러니까 플러시가 호출된 다음에 update 벌크 쿼리가 실행되는 것이지요.

그런데 이 update 벌크 쿼리가 영속성 컨텍스트에 있는 엔티티는 무시하고 바로 데이터베이스에 있는 데이터에 영향을 줍니다.

그래서 update 벌크 연산이 실행되고 나면 데이터베이스에 있는 데이터와 영속성 컨텍스트의 데이터가 달라지게 됩니다^^!

여기서 쿼리 수행전에 flush는 수행되도 clear는 수행되지 않아서 update 벌크 연산이 수행된 이후에 DB와 영속성 컨텍스트의 데이터가 달라지는게 맞나요?


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

안녕하세요. 최종민님

네 맞습니다. DB와 영속성 컨텍스트의 데이터가 달라질 수 있습니다.

감사합니다.

a79007714님의 프로필 이미지
a79007714

작성한 질문수

질문하기