프록시의 기초
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 |