• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

프록시의 특징 질문

23.02.21 22:47 작성 23.02.21 23:20 수정 조회수 315

2

안녕하세요! 영한님

질문 드립니다.

 

질문 1)

만약 동일한 트랜잭션안에서 처음에 em.getReference()를 사용하면 프록시 객체를 반환하고, em.find()를 사용해도 프록시 객체를 반환한다.

반대의 경우 동일한 트랜잭션안에서 처음에 em.find()를 사용하면 실제 엔티티가 반환되고, em.getReference()를 사용해도 실제 엔티티를 반환한다.

제가 이해한게 맞을까요?

 

질문 2)

em.getReference() 를 사용하여 프록시 객체를 조회한 프록시 객체도 결국 EntityManager를 사용하여 조회한 것이기 때문에 영속성 컨텍스트에서 관리되는 것 같은데 맞을까요?

 

감사합니다.^^

 

답변 1

답변을 작성해보세요.

2

y2gcoder님의 프로필

y2gcoder

2023.02.22

안녕하세요, 개발하는쿼카 님. 공식 서포터즈 y2gcoder 입니다.

질문 1)

만약 동일한 트랜잭션안에서 처음에 em.getReference()를 사용하면 프록시 객체를 반환하고, em.find()를 사용해도 프록시 객체를 반환한다.

반대의 경우 동일한 트랜잭션안에서 처음에 em.find()를 사용하면 실제 엔티티가 반환되고, em.getReference()를 사용해도 실제 엔티티를 반환한다.

제가 이해한게 맞을까요?

=> 맞습니다. 영속성 컨텍스트의 기능 중 동일성 보장을 위해 참조값을 그대로 유지되어야 하기 때문에, 프록시로 조회했으면 프록시로, 엔티티로 조회했으면 엔티티로 반환합니다.

질문 2)

em.getReference() 를 사용하여 프록시 객체를 조회한 프록시 객체도 결국 EntityManager를 사용하여 조회한 것이기 때문에 영속성 컨텍스트에서 관리되는 것 같은데 맞을까요?

=> 맞습니다. 어떻게 보니 질문1)에 대한 답변과 겹치는 부분입니다. 영속성 컨텍스트의 기능(동일성 보장)을 사용하고 있기 때문입니다.



감사합니다.