해결된 질문
작성
·
218
0
안녕하세요!
다른 분들도 이 부분에 대해서 질문을 하셨고 답변을 봤지만, 여전히 이해가 안돼서 다시 한번 질문을 드립니다. ㅠㅠ
1 em.persist(member) ;
2
3 em.flush();
4 em.clear();
5
6 em.getReference(Member.class, member.getId());
7
8 System.out.println("findMember.id = " + findMember.getId());
em.clear()를 하면 1차 캐시가 전부 비워지고, GeneratedValue로 생성된 id값은 DB에 저장되어 있습니다.
em.getReference(id)를 하는 시점에 가짜 프록시 객체가 영속성 컨텍스트에서 관리가 된다고 하셨는데,
여기서 가짜 프록시 객체는 id값을 어떻게 1로 가지고 있는 건가요?? 결국 1이라는 값을 알기 위해서는 DB에서 가져와야 하는게 아닌가요??
아니라면 혹시 자동으로 SEQUENCE 전략으로 변경되어 메모리에 디폴트로 50까지 가지고 있기 때문에 1을 출력해주는 것일까요?
답변 감사합니다!
그렇다면 설명해주신게
1. persist할 때 시퀀스 오브젝트에서 순번을 받아온다.
2. 이 때 내부적으로 영속성 컨텍스트와 member 객체에 넣어준다.
3. 그래서 member.getId()로 가져올 수 있고 getReference할 때 id를 전달 받는다.
이렇게 동작을 한다고 이해하면 될까요??