• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

스냅샷 업데이트 관련 질문

23.05.03 11:52 작성 23.05.03 11:55 수정 조회수 270

0

'dirty checking에서 스냅샷은 엔티티의 최신 상태를 반영하고 있다. 스냅샷은 계속 업데이트된다'가 맞을까요?

스냅샷이 처음에는, 엔티티가 1차 캐시에 들어온 상태에 대한 스냅샷이지만,
엔티티를 변경하면 스냅샷도 변경되는 것이 맞을까요?

 

예를 들어, member 테이블에 (1L, "A")가 저장되어 있고, 스냅샷도 (1L, "A")인 상황에서, 다음 코드를 실행하였습니다.

Member findMember = em.persist(new Member(1L, "A"));
findMember.setName("AA");
tx.commit();

tx.commit()이 호출되면 flush()가 호출되고, 엔티티와 스냅샷을 비교하여 update 쿼리가 DB에 전달됩니다. 그리고 비교한 시점 이후 어디에선가 스냅샷이 변경되는 것이 맞을까요?
스냅샷이 변경된다고 생각하게 된 상황은 다음과 같습니다. (엔티티를 (1L, "AA")로 변경한 이후) 엔티티를 (1L, "A")로 변경을 했을 때, update 쿼리가 DB에 전달되었기 때문인데요, 만약, 처음에 스냅샷이 (1L, "AA")로 변경되지 않았다면, 엔티티와 스냅샷은 (1L, "A")로 동일하였을 것이고, 따라서 update 쿼리가 DB에 전달되지 않을 것이기 때문입니다.

답변 1

답변을 작성해보세요.

0

David님의 프로필

David

2023.05.06

안녕하세요. 도토리님, 공식 서포터즈 David입니다.

아래 글 답변을 참고해 주세요:)

https://www.inflearn.com/questions/32789

감사합니다.