작성
·
321
0
벌크 연산 수행 후
em.flush(), em.clear() 를 통해 동기화 해주셨는데
벌크 연산 작업 과 다른 비즈니스 로직의 타이밍이 일치하게 될 경우 (이 때 서로 같은 엔티티를 다루는 케이스가 있다고 가정)
비즈니스 로직에서 예를 들어 어떤 포인트를 100 올려주는 로직이 실행되고 (user a)
+ 어떤 (user b)는 포인트 100 감소
벌크 연산에서는 포인트가 3000이상인 경우 30% 증가라는 작업이 이루어 질때,
(비즈니스 로직이 먼저 진행 사건이라고 가정, 근데 타이밍이 애매하게 걸치면)
위의 비즈니스 로직이 적용되기 전에 포인트 벌크 작업이 진행될 수 도 있을 것 같습니다.
(예시가 좀 좋지 않은것 같긴한데요)
이런 케이스를 막기 위해서는 user a와 b의 결과가 적용될 수 있도록 em.flush(), em.clear()의 동기화 작업을 먼저하고
벌크 연산을 해줘야 하나? 라는 생각이 들었는데
이런 케이스에서는 벌크 작업 후 동기화해도 문제가 없을까요?