2주만에 돌아온 TIL.
클론코딩과 마지막 프로젝트덕에 TIL 쓸 시간조차 없었다..
정말 인생에서 이렇게 많이 공부하고 열심히 했던 적이 있나 싶다.
지금 프로젝트를 진행하면서 포스트의 status를 모두 바꿔야 하는 경우가 생겼다.
그래서 스케줄러를 도입해서 jpa의 더티체킹을 이용하여 status 업데이트해 주었는데...
이렇게 update 쿼리가 포스팅의 갯수만큼 나가는 것이였다!
이걸 어떻게 한번에 처리 할 수 있을까 고민하다가 검색해보니 벌크쿼리라는 것이 있더라.
사용후 업데이트 쿼리
한개만 나간다 !
여기서 알아둬야 할 점
update 와 delete를 사용할 때는 modifying을 사용해줘야 한다!
JPA의 데이터는 영속성 컨텍스트에서 관리하고 있다.
근데 벌크연산은 영속성 컨텍스트를 무시하고 디비에 넣기 때문에 영속성 컨텍스트의 데이터와 db의 데이터가 맞지 않게 된다.
그러므로 벌크 연산 이후에 영속성 컨텍스트를 초기화 해주어야
다음 호출시에 db의 값과 같은 결과를 낼 수 있다!
clearAutomatically=ture 는 이 영속성 컨텍스트를 초기화 해주는 역할을 한다!