[JPA] 프록시 동일 객체 (==, equals) 비교 실패 ? instanceOf 사용
2023. 5. 28. 18:46ㆍJPA
- 프록시 객체는 처음 사용할 때 한 번만 초기화
- 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 바뀌는 것이 아니다. 실제 엔티티에 접근을 하는 것일 뿐.
- 프록시 객체는 원본 엔티티를 상속 받고 있다. 그래서 타입 체크할 때 == 비교시에 실패 가능성이 있다. (로직이 복잡해지면 받아온 객체가 프록시인지 실제 객체인지 구분이 어렵기 때문)
-----> instanceof 사용해야 한다.
- 영속성 컨텍스트에 엔티티가 이미 있으면, 프록시를 호출하는 getReference를 호출해도 실제 엔티티가 반환된다.
- 영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일때 프록시를 초기화하면 예외 발생
(하이버네이트 - org.hibernate.LazyInitailizationException.......)
'JPA' 카테고리의 다른 글
[JPA, QueryDsl] inner join ? left join ? (0) | 2023.06.06 |
---|---|
[JPA] 쿼리 파라미터 값으로 동적인 결과를 반환할 때 null값 처리(검색 필터링) (0) | 2023.05.09 |
[JPA] JPQL - join 예시 (0) | 2023.05.08 |
[JPA] JPQL - 페이징 (0) | 2023.05.08 |
[JPA] JPQL- 기본 쿼리문 예시 (0) | 2023.05.08 |