
배경: 45번째줄의 Delivery.markShipping() 메서드는 Delivery 객체의 status 필드와 statusUpdatedAt 필드를 업데이트시킨다.
현재 delivery는 JPA가 관리하는 영속 상태(managed entity)이다
- 근거: 33번째줄 findByStatusAndStatusUpdatedAtBefore 메서드
따라서 delivery.markShipping(now)로 필드만 변경해도, 트랜잭션이 커밋될 때 더티 체킹(dirty checking)에 의해 자동으로 UPDATE 쿼리가 실행된다.
앞에서 save()를 명시적으로 호출하면 merge가 실행되어 불필요한 select 쿼리가 추가로 발생할 수도 있기 때문에, 결론적으로 46번째줄의 save() 메서드 호출은 불필요하다.
'JPA' 카테고리의 다른 글
| [한입지식] Flush는 언제 일어날까? (2) | 2026.04.19 |
|---|---|
| [한입지식] Flush란 무엇일까? (0) | 2026.04.19 |