Skip to main content

프록시, 지연로딩

·103 words·1 min· loading
Table of Contents
JPA - This article is part of a series.
Part 6: This Article

프록시
#

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 조인, 엔티티 그래프 등의 기능 사용
JPA - This article is part of a series.
Part 6: This Article