• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

39분 때 em.clear()에 관해서 질문이 있습니다.

22.10.25 21:28 작성 조회수 218

1

강의에서 39분 쯤에 em.detach(), em.close()는 왜 프록시가 초기화가 안되는지 이해했습니다.

근데 em.clear()는 단순히 영속성 컨텍스트를 비우는 것으로 아는데
원래 프록시가 영속성 컨텍스트에 초기화 요청을 하고 없으면 DB에 조회를 해서 실제 Entity를 target으로 가져오는 것으로 이해를 했는데 em.clear()로 비워져있다고 refMember.getUsername()이 왜 안되는 것인지 이해가 가질 않았습니다. 그래서 생각해본 결과 질문이 있습니다.

Q. 혹시 프록시 초기화를 요청하는 과정이 em.getReference()로 조회를 하면
그때 이미 프록시 객체가 진짜 객체 대신에 영속성 컨텍스트에 보관되고 뒤에 refMember.getUsername()이나 기타 다른 초기화 요청이 올 때 영속성 컨텍스트에서 DB로 조회해서 실제 객체를 프록시 내부로 들이는 것인가요...?

답변 1

답변을 작성해보세요.

1

y2gcoder님의 프로필

y2gcoder

2022.10.27

안녕하세요. 지호님, 공식 서포터즈 y2gcoder입니다.

맞습니다. 간단하게 생각해보면 프록시도 결국 영속성 컨텍스트 위에서 사용하는 객체인데, 영속성 컨텍스트를 비워버리니 프록시 객체가 없어 초기화 요청을 할 수 없게 되는 것입니다.
감사합니다.