2014-06-11 2 views
-4

다음과 같이 리플렉션을 사용하여 객체를 가져옵니다. 여기에서 가져온 필드는 최대 절전 모드 Lazy 로딩에 의해 매핑됩니다.Hibernate Lazy 로딩 객체의 getDeclaredFields()는 필드를 반환하지 않습니다.

obj.getClass().getDeclaredFields() 

을 다음과 같이

final Field field = clazz.getDeclaredField(fieldName); 
field.setAccessible(true); 
Object obj = field.get(instance); 

는 그럼 난 결과 객체를 사용하지만이 나에게 개체에 정의 된 모든 필드를 반환하지 않습니다. 이 객체는 JPA 엔티티 목록에있는 엔티티 중 하나 일 수 있습니다. 캐스팅 된 객체 대신 Object를 사용할 때 문제가 있다고 생각합니다.

어떻게이 작업을 수행하고이 새로운 발견 된 개체의 모든 필드를 가져올 수 있습니까?

+0

나는 누가 이것을 투표했는지 확실하지 않습니다. 그러나 나는 그 설명을 알고 싶다. 나는 더 많은 정보를 제공 할 수 있습니다. 더 명확하게하기 위해 나는 어떤 유형으로 만들어야하는지 알지 못합니다. 클래스 유형은 필드에 있지만 동적입니다. – dinesh707

+0

현재 실제 클래스에서 하나가 아닌 수퍼 클래스에서 선언 된 필드를 찾으십니까? http://stackoverflow.com/a/16966699/504685 – Charlie

+1

문제를 보여주는 짧지 만 완전한 프로그램을 보여주십시오. (그리고 아뇨, 이것은 캐스팅과 관련이 없습니다.) –

답변

0

간단히 Reflection이고 최대 절전 모드는 쉬운 단계로 작동하지 않습니다.

코드의 instance 개체는 최대 절전 모드 (Lazy loading)에 의해 가져온 개체입니다. 그 Object는 실제의 Java object는 아니고, hibernate proxy object를 돌려줍니다. Proxy 객체에서 Reflection을 호출하면 원하는 것보다 전혀 예상치 못한 결과가 나타납니다.

의견에서 https://stackoverflow.com/users/424903/gimby은 최대 절전 모드 지연로드 된 개체의 프록시를 해제하는 데 사용할 수있는 솔루션을 가리 킵니다. Converting Hibernate proxy to real object

관련 문제