해결된 질문
작성
·
161
1
선생님 준영속상태의 초기화를 하실때(37분 20초에서 )
Member refMember = em.getReference(Member.class, member1.getId());
를 해주셨는데 getReference도 find와 같이 문장이 실행되는 순간 영속성컨텍스트에프록시 객체를 올린다음에 초기화시 컨텍스트에서 엔티티를 뒤지고 없으면 db로 가서 끌고온다음에 또 영속성컨텍스트에 올려서 확인을 하는게 맞는지요?
이게맞다면 member1은 em.flush와 em.clear를 통해 영속성컨텍스트에는 존재하지 않으며 db에는 올라가있고 -> getReference코드를 실행시켜서 일단 초기화되지 않는 프록시 객체를 만들었고요 -> detach를 통해서 refmember를 준영속 상태를 만들어주었습니다.
영속성컨텍스트에는 제가 생각할땐 아무것도 없는 상태인데 detach가 왜가능한건가요? 프록시객체가 초기화되어서 엔티티를 만들어낸 것도 아니고 초기화되기전 프록시객체 자체도 영속성컨텍스트에 올라가있는건가요? em.persist(refMember)을 써준것도아니고 ... 프록시객체도 엔티티라고 치고 올린다음에 그안에 참조값을 실제 엔티티생성과 동시에 채워주는건가요?
그리고 두번째로 refmember 자체가 초기화되기전에 만약 team테이블과 연관이 있으면 refmember을 초기화하는순간 member와 team까지 다불러오는건가요? 이건 fetch 속성과 관련이 없는건가요?
이쯤오니 너무 헷갈립니다ㅜㅜ 제 질문을 이해하셨을지 모르겠습니다... 지저분한글 읽어주셔서 감사합니다 선생님 항상 감사합니다.