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

유승현님의 프로필 이미지
유승현

작성한 질문수

실전! Querydsl

수정, 삭제 벌크 연산

벌크 연산과 동기화 시점관련 질문

작성

·

321

0

벌크 연산 수행 후 

em.flush(), em.clear() 를 통해 동기화 해주셨는데

 

벌크 연산 작업 과 다른 비즈니스 로직의 타이밍이 일치하게 될 경우 (이 때 서로 같은 엔티티를 다루는 케이스가 있다고 가정)

 

비즈니스 로직에서 예를 들어 어떤 포인트를 100 올려주는 로직이 실행되고 (user a)

+ 어떤 (user b)는 포인트 100 감소

 

벌크 연산에서는 포인트가 3000이상인 경우 30% 증가라는 작업이 이루어 질때,
(비즈니스 로직이 먼저 진행 사건이라고 가정, 근데 타이밍이 애매하게 걸치면)
위의 비즈니스 로직이 적용되기 전에 포인트 벌크 작업이 진행될 수 도 있을 것 같습니다.


(예시가 좀 좋지 않은것 같긴한데요)
이런 케이스를 막기 위해서는 user a와 b의 결과가 적용될 수 있도록 em.flush(), em.clear()의 동기화 작업을 먼저하고 
벌크 연산을 해줘야 하나? 라는 생각이 들었는데

이런 케이스에서는 벌크 작업 후 동기화해도 문제가 없을까요?

답변 1

0

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

안녕하세요. 승현님

해당 작업들이 끝나고(커밋까지 완료) 벌크연산을 실행해주어야 정상 반영됩니다.

감사합니다.

유승현님의 프로필 이미지
유승현

작성한 질문수

질문하기