• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

프록시와 영속성 컨텍스트 스냅샷

21.11.17 00:18 작성 조회수 174

0

안녕하세요 김영환님! 프록시가 영속성 컨택스트에 의해 관리되고, 동일 트랜잭션에서는 영속성 컨텍스트 내에 동일성을 위해 엔티티는 프록시에 저장된다는 답변을 보고 질문을 남깁니다. 

저는 그래서 1차 캐시에 프록시가 저장이 되고 (id는 동일하므로) 실제 엔티티 객체는 1차 캐시에 직접적으로 저장되기 보다는 프록시에 저장(래핑) 되는 형태로 이해했는데요. 그렇다면 스냅샷은 어떻게 관리되고, 더티체킹은 어떻게 되는지 궁금합니다. 프록시와 감싸여진 실제 엔티티 모두가 스냅샷이 저장되나요? 더티체킹은 어떻게 진행되나요???

추가적으로 프록시의 id는 getReference()를 호출하면서 입력해준 id가 되는데 이때 id가 db 상에 존재하지 않는다면 초기화때 어떤 예외가 발생하는지도 궁금합니다.

좋은 강의 감사합니다!!

답변 1

답변을 작성해보세요.

2

안녕하세요. Kenneth Jung님

Q: 프록시와 감싸여진 실제 엔티티 모두가 스냅샷이 저장되나요?

-> 실제 엔티티만 스냅샷이 저장됩니다. 프록시는 껍데이길 뿐이니까요.

Q: 더티체킹은 어떻게 진행되나요???

-> 실제 엔티티만 더티체킹을 합니다. 프록시는 껍데이길 뿐이니까요.

Q: 추가적으로 프록시의 id는 getReference()를 호출하면서 입력해준 id가 되는데 이때 id가 db 상에 존재하지 않는다면 초기화때 어떤 예외가 발생하는지도 궁금합니다.

-> 제가 직접 정답을 알려드릴 수 도 있지만, 그러면 더 많은 것을 얻어가지 못합니다^^
개발자는 궁금한 부분을 직접 코드로 테스트 해볼 때 가장 많이 배울 수 있습니다.
해당 부분을 코드로 직접 테스트해보시고, 그 결과를 공유해주세요. 그러면 함께 공부하는 분들께도 큰 도움이 될거에요. 그럼 테스트 해보시고 결과도 정리해서 공유 부탁드립니다.

감사합니다.