본문 바로가기

웹 프로그래밍/JPA

프록시

프록시의 기초

em.find(): 데이터베이스를 통해서 실제 엔티티(진짜) 객체 조회

em.getReferrence(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회

-DB에 쿼리가 안나가는데 저장이 된다? -> DB에 있는 값이 실제 사용되는 시점에 DB에 쿼리를 날림 

 

프록시 특징

-실제 클래스를 상속받아서 만들어짐(겉모양이 같음)

-사용자 입장에서 진짜인지 가짜인지 구분하지 않고 사용하면 됨

-프록시 객체는 실제 객체의 참조를 보관

-프록시 객체의 메서드를 호출하면 프록시 객체는 실제 객체의 메서드를 호출

-초기화 할때 없으면 영속성 컨텍스트에 초기화 요청하여 DB에서 가져와서 진짜 객체를 만들고 프록시 객체가 참조하여 연결시킴

-타입 비교 (==비교 대신 instance of 사용)

-영속성 켄텍스트에 이미 있으면 em.getReference()해도 진짜가 호출됨 (== 비교 보장)

-반대로 프록시로 먼저 받고 em.find()를 하면 프록시가 반환됨 (한 트랜잭션안에서 == 비교 보장을 위해)

-영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일때(detach), 프록시를 초기화하면 문제 발생

 

 

'웹 프로그래밍 > JPA' 카테고리의 다른 글

영속성 전이(CASCADE)와 고아 객체  (0) 2023.03.04
즉시로딩과 지연로딩  (0) 2023.03.04
고급 매핑  (0) 2023.03.04
연관관계 매핑 기초  (0) 2023.03.03
엔티티 매핑  (0) 2023.03.02