em.find 와 em.getReference의 비교
1. em.find()
Member findMember = em.find(Member.class, member.getId()); //요때 쿼리 날라감
System.out.println("findMember : " + findMember.getClass());
System.out.println("findMember.id : "+ findMember.getId());
System.out.println("findMember.name : "+ findMember.getName());
2. em.getReference()
//proxy객체만 가져옴. 쿼리는 날라가지않음
//MemberProxy > Member target/ getId, getName
Member findRefMember = em.getReference(Member.class, member.getId());
//getClass는 단순 class가 아니라 class$HibernateProxy$~~
System.out.println("findMember : " + findRefMember.getClass());
System.out.println("findMember.id : "+ findRefMember.getId());
// 아래 시점에 select 쿼리 날라감. 영속성컨텍스트에 초기화 요청.
//memberProxy에 name이 없어서 영속성컨텍스트에 초기화를 요청해서 실제 entity를 가져옴.
System.out.println("findMember.name : "+ findRefMember.getName());
//초기화를 요청하는것은? proxy객체가 실제의 entity로 바뀌는게 아니라.
//proxy객체가 실제 entity에 접근하는것
//초기화는 한번만 이루어짐
//Member > id, name/ getId, getName
'IT > jpa' 카테고리의 다른 글
springboot + gradle + jpa + oracle 설정 (1) | 2020.01.14 |
---|---|
jpa는 아닌 mybatis의 foreach 사용법 (0) | 2016.05.18 |