JPA [기본] 프록시

신재원·2023년 1월 27일
0

JPA 기본

목록 보기
17/31
post-thumbnail

프록시 기초

em.find() VS em.getReference()

  • em.find() : 데이터베이스를 통해서 실제 엔티티 객체를 조회
  • em.getReference() : 데이터베이스 조회를 미루는 가짜 (프록시, 껍데기) 엔티티 객체 조회

프록시 특징

  • 실제 클래스를 상속받아서 만들어진다.
  • 실제 클래스와 겉 모양이 같다.
  • 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지않고 사용하면된다. (이론상)

  • 프록시 객체는 처음 사용할때 한 번만 초기화
  • 프록시 객체를 초기화 할때 프록시 객체가 실제 엔티티로 바뀌는것은 아님, !! 초기화가 되면 프록시 객체를 통해서 실제 엔티티에 접근이 가능한것이다.
  • 프록시 객체는, 원본 엔티티를 상속받는다, 따라서 타입 체크시 주의해야한다. (== 비교대신, instance of 사용)
  • 영속성 컨텍스트의 도움을 받을수 없는 준영속 상태일때 (em.detach(), em.close()), 프록시를 초기화 하면 문제 발생 (!! 실무에서 많이만날수있는 케이스)
  • 프록시 객체는 실제 객체의 참조 (target)을 보관한다.
  • 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메서드 호출
  • 예 ) getName()호출 --> target에 있는, getName()을 호출한다.

0개의 댓글