강의
jpa 강의
프록시
- 원래 객체를 찾을 땐 em.find()를 해서 db쿼리를 날려 받아왔으면,
- 쿼리 안 날리고 가짜 proxy entity객체를 조회하는데 쓰는 함수 =>
em.getReference()
프록시 특징
- 프록시 객체는 처음 사용할 때 한번만 초기화된다
- 프록시 객체를 초기화할 때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아님. 초기화되면 프록시 객체를 통해서 실제 엔티티에 접근이 가능함
- 프록시 객체는 원본 엔티티를 상속받는다. 따라서 타입 체크 시 주의해야 한다. ->
instanceof를 사용해라 - 영속성 컨텍스트(1차 캐시)에 찾는 엔티티가 이미 있으면
em.getReference()를 호출해도 실제 엔티티를 반환한다. - 영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일 때, 프록시를 초기화하면 문제가 발생한다.
- 그니까 detach, close됐을 때 프록시 접근하려고 하면 생기는 문제인 것
즉시 로딩과 지연로딩
웬만해선 지연로딩을 쓰자 ㅇㅇ
영속성 전이와 고아 객체
CASCADE.ALL/REMOVE/PERSIST orphanRemoval = true