Java Hibernate惰性加载对象的getDeclaredFields()不返回字段

Java Hibernate惰性加载对象的getDeclaredFields()不返回字段,java,reflection,Java,Reflection,我使用反射获取一个对象,如下所示。这里,我获取的字段通过hibernate延迟加载映射 final Field field = clazz.getDeclaredField(fieldName); field.setAccessible(true); Object obj = field.get(instance); 然后我使用结果对象,如下所示 obj.getClass().getDeclaredFields() 但这并没有返回对象中定义的所有字段。此对象可以是“我的JPA实体”列表中的任

我使用反射获取一个对象,如下所示。这里,我获取的字段通过hibernate延迟加载映射

final Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
Object obj = field.get(instance);
然后我使用结果对象,如下所示

obj.getClass().getDeclaredFields()
但这并没有返回对象中定义的所有字段。此对象可以是“我的JPA实体”列表中的任何实体。我认为使用Object而不是casted Object存在问题


我如何才能做到这一点,并获得这个新发现的对象的所有字段。

问题仅仅是反射,而Hibernate不能用简单的步骤工作

代码中的实例对象是通过hibernate延迟加载获取的对象。该对象返回的不是真正的java对象,而是hibernate代理对象。在代理对象上调用反射将得到完全出乎意料的结果


在中,注释指出了一个解决方案,该解决方案可用于取消hibernate惰性加载对象的代理

我不知道是谁投了反对票。但我想知道原因。也许我能提供更多的信息。。为了更清楚,我不知道它应该铸成什么类型。类类型存在于字段中,但其动态性是否需要在超类上查找声明的字段,而不是当前实际类上的字段?请展示一个简短但完整的程序来演示问题。不,这与演员阵容无关。你只是在重复你自己,无视我们的要求。显示实际的代码,而不是解释您希望代码执行的操作。这是一个艰苦学习的教训:将反射或instanceof操作符与Hibernate实体结合使用不是一件可靠的事情,因为您可能会遇到代理类。在我发现这个问题之前,我在那个区域感到非常痛苦: