프록시#
em.find VS em.getRefrence#
- em.find() : 실제 DB에서 가져옴
- em.getReference() : DB 조회를 미루는 가짜(프록시 extends 실제) 를 가져옴
프록시 객체를 호출하면, 실제 객체의 메소드 호출
프록시의 특징#
- 처음 한번만 초기화
- 초기화할때, 실제 Entity로 바뀌지 않음 => 프록시를 통해 실제에 접근하는것
- 원본 엔티티를 상속받음 (비교시
instance of) - 영속성 컨텍스트에 찾는 엔티티가 있으면,
em.getReference()는 실제 엔티티 반환 - 준영속 상태일때, 초기화시 문제 발생
지연로딩#
지연로딩
fetch = FetchType.LAZY처음에 프록시를 가져오고, 실제 사용할때 초기화
주의점#
가급적 지연 로딩만 사용
- 예상치 못한 SQL 발생
- N+1문제
@ManyToOne,OneToOne은 디폴트가 즉시로딩- 지연로딩을 사용하고, 한방쿼리가 필요할 땐 fetch 조인, 엔티티 그래프 등의 기능 사용

