본문 바로가기
Spring

Spring Data MongoDB Document (Proxy)객체 저장 후 로드 시 에러 발생

by Gil Granger 2019. 8. 14.

session에 document를 레디스를 통해 저장했다가 다른 WAS에서 세션을 로드시  cglib proxy 객체 때문에 다시 로드하지 못하는 이슈를 해결하기 위해 찾아보면서 방법들을 정리해본다.

1. 데이터를 전달해야될경우 시리얼라이즈 하기 위해 DTO에 매핑한다.

 

2.  dbref 어노테이션으로 lazy loading을 했을 경우 해당 필드는 LazyLoadingProxy에 캐스팅할수 있다.

//target db ref field 
if (object instanceof LazyLoadingProxy) {
	LazyLoadingProxy proxy = (LazyLoadingProxy)object;
	target = proxy.getTarget();
}

 

3. spring cglib proxy객체를 생성한것이기 때문에 리플렉션으로 접근하는 방법도 있다.

Field field = object.getXX().getClass().getDeclaredField("CGLIB$CALLBACK_0");
field.setAccessible(true);
Object dynamicAdvisedInterceptor = field.get(object.getXX());
Field resultField = dynamicAdvisedInterceptor.getClass().getDeclaredField("result");
resultField.setAccessible(true);
....

 

댓글