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

이동준님의 프로필 이미지
이동준

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 컨텍스트 2

Entity, 스냅샷 변경 감지

작성

·

35

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

 

안녕하세요 강의를 보던 중 궁금한 것이 생겼습니다 !

 

변경 감지를 할 때 Entity와 스냅샷을 비교하여 데이터가 변경되었는지 확인을 한다면 1차캐시에 em.persist로 넣어줘야 엔티티가 변경이 되지않을까? 라고 생각을 했습니다.

하지만 코드에는 em.persist를 주석처리하여 실행이 되지않게 막아놨음에도 변경 감지가 된다는 것은 제가 이해한 것 과는 다르게 persist를 해주지 않아도 set메서드를 사용하여 데이터를 바꿔준다면 1차 캐시의 엔티티가 변경이 되는건가요 ?

 

=> 변경 감지가 일어나려면? -> Entity가 변경이 되어야 한다 -> 그러면 persist로 변경된 Entity 값을 1차캐시에 넣어준다 -> 후에 스냅샷( 전 Entity 데이터 )와 변경된 Entity를 비교하여 다를 시 쿼리를 날린다 라고 이해를 하고 있는 상태입니다 !



[질문 내용]
여기에 질문 내용을 남겨주세요.

답변 2

0

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

안녕하세요. 이동준님

em.find()와 같이 JPA를 통해서 엔티티를 조회하는 경우, 조회한 엔티티도 영속성 컨텍스트에서 관리됩니다.

따라서 이 경우에도 변경 감지가 작동합니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 이동준님.

JPA에서 엔티티와 스냅샷을 활용한 변경 감지에 대한 질문이시군요. 먼저 궁금하신 부분을 짚어드리자면, 영속성 컨텍스트 내에서 엔티티를 변경하면 JPA는 트랜잭션 종료 시점에 스냅샷과 현재 상태를 비교하여 변경 사항이 있으면 데이터베이스에 업데이트 쿼리를 실행합니다.

다음의 링크들이 추가적인 이해에 도움이 될 것입니다:

  1. 엔티티 변경감지에 대하여: 이 답변에서는 엔티티와 스냅샷 비교를 통해 변경 내용을 감지하는 JPA의 기본 동작 방식을 설명합니다. 특히, 엔티티의 참조 관리에 대해 다루고 있습니다.

  2. 변경감지 스냅샷: JPA에서 스냅샷이 어떻게 구성되고 비교되는지를 구체적으로 알려주며, 1차 캐시와의 관계도 설명합니다.

  3. 플러시 후, 스냅샷 상태는 어떻게 되나요?: 플러시 이후 엔티티와 스냅샷의 동기화 과정에 대한 문의에 대해 상세한 답변을 제공하고 있습니다.

이와 같은 게시물들을 참고하면 JPA의 변경 감지 시스템에 대한 심도 있는 이해를 돕는 데 유익할 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이동준님의 프로필 이미지
이동준

작성한 질문수

질문하기