해결된 질문
작성
·
448
·
수정됨
2
안녕하세요! 영한님
질문 드립니다.
질문 1)
만약 동일한 트랜잭션안에서 처음에 em.getReference()
를 사용하면 프록시 객체를 반환하고, em.find()
를 사용해도 프록시 객체를 반환한다.
반대의 경우 동일한 트랜잭션안에서 처음에 em.find()
를 사용하면 실제 엔티티가 반환되고, em.getReference()
를 사용해도 실제 엔티티를 반환한다.
제가 이해한게 맞을까요?
질문 2)
em.getReference()
를 사용하여 프록시 객체를 조회한 프록시 객체도 결국 EntityManager
를 사용하여 조회한 것이기 때문에 영속성 컨텍스트에서 관리되는 것 같은데 맞을까요?
감사합니다.^^
답변 1
2
안녕하세요, 개발하는쿼카 님. 공식 서포터즈 y2gcoder 입니다.
질문 1)
만약 동일한 트랜잭션안에서 처음에
em.getReference()
를 사용하면 프록시 객체를 반환하고,em.find()
를 사용해도 프록시 객체를 반환한다.반대의 경우 동일한 트랜잭션안에서 처음에
em.find()
를 사용하면 실제 엔티티가 반환되고,em.getReference()
를 사용해도 실제 엔티티를 반환한다.제가 이해한게 맞을까요?
=> 맞습니다. 영속성 컨텍스트의 기능 중 동일성 보장을 위해 참조값을 그대로 유지되어야 하기 때문에, 프록시로 조회했으면 프록시로, 엔티티로 조회했으면 엔티티로 반환합니다.
질문 2)
em.getReference()
를 사용하여 프록시 객체를 조회한 프록시 객체도 결국EntityManager
를 사용하여 조회한 것이기 때문에 영속성 컨텍스트에서 관리되는 것 같은데 맞을까요?
=> 맞습니다. 어떻게 보니 질문1)에 대한 답변과 겹치는 부분입니다. 영속성 컨텍스트의 기능(동일성 보장)을 사용하고 있기 때문입니다.
감사합니다.