본문 바로가기

IT/jpa

JPA proxy

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