작성
·
245
답변 1
3
안녕하세요. Ul ysses님^^
em.getReference(Member.class, member.getId()) 이 부분에 힌트가 있습니다.
getReference를 호출해서 프록시로 조회할 때 member.getId(), 그러니까 ID 값을 넘깁니다.
이 ID 값을 내부에서 들고 있기 때문에 이후 getId()를 했을 때는, DB를 조회하지 않고, 방금 넘겨둔 ID 값을 사용합니다.
그러면 더 앞으로가서 다음 코드에서 member에는 애초에 어떻게 id가 들어있나요?
Member member = new Member()
member.setUsername("hello")
em.persist(member) -> 바로 이 부분을 거치면 ID가 들어가게 됩니다. ID 자동생성 전략이 이때 실행이 되고, ID에도 값이 들어가게 됩니다.
JPA에서 영속상태가 되려면 ID(PK)가 필수 입니다.
감사합니다.
안녕하세요! 저도 해당 부분 이해가 되지 않아 문의 드립니다. em.clear() 를하게 되면 준영속 상태가 되어 영속성 컨텍스트의 데이터가 지워지는 것으로 이해했는데 어떻게 getId()는 가져 올 수 있는 건가요??