지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데, 이것을 프록시 객체라고 한다.
하이버네이트는 지연 로딩을 지원하기 위해 프록시를
→ 바이트 코드를 수정하는 방법은 설정이 복잠. 따라서 별도의 설정이 필요 없는 프록시에 대해서만 알아본다.
em.find()
를 사용하면 영속성 컨텍스트에 entity 없으면 DB 조회 (entity 직접 조회)
이렇게 emtity 직접 조회하면 entity를 실제 사용하든 사용하지 않든 DB 조회하게 된다.
엔티티를 실제 사용하는 시점까지 DB 조회를 미루고 싶다면 em.getReference()
를 사용하면 된다.
이 메서드 호출시 DB 조회 하지 않고 실제 엔티티 객체도 생성하지 않는다.
대신에 DB 접근을 위임한 프록시 객체를 반환한다.