[JPA] 프록시 동일 객체 (==, equals) 비교 실패 ? instanceOf 사용

2023. 5. 28. 18:46JPA

- 프록시 객체는 처음 사용할 때 한 번만 초기화

 

- 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 바뀌는 것이 아니다. 실제 엔티티에 접근을 하는 것일 뿐.

 

- 프록시 객체는 원본 엔티티를 상속 받고 있다. 그래서 타입 체크할 때 == 비교시에 실패 가능성이 있다. (로직이 복잡해지면 받아온 객체가 프록시인지 실제 객체인지 구분이 어렵기 때문) 

-----> instanceof 사용해야 한다.

 

- 영속성 컨텍스트에 엔티티가 이미 있으면, 프록시를 호출하는 getReference를 호출해도 실제 엔티티가 반환된다.

 

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

(하이버네이트 - org.hibernate.LazyInitailizationException.......)