21.02.10 14:23 작성
·
243
답변 1
3
2021. 02. 10. 21:34
안녕하세요. 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)가 필수 입니다.
감사합니다.
2022. 08. 16. 22:35
안녕하세요! 저도 해당 부분 이해가 되지 않아 문의 드립니다. em.clear() 를하게 되면 준영속 상태가 되어 영속성 컨텍스트의 데이터가 지워지는 것으로 이해했는데 어떻게 getId()는 가져 올 수 있는 건가요??