使用反射获取对象如下:这里我获取的字段是通过hibernate惰性加载映射的。
final Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
Object obj = field.get(instance);
然后我使用结果对象如下
obj.getClass().getDeclaredFields()
但是这并没有返回对象中定义的所有字段。这个对象可以是我的JPA实体列表中的任何实体。我认为使用Object而不是cast Object有问题。
我怎么能做到这一点,并获得这个新发现的对象的所有字段
问题仅仅是反射和Hibernate没有简单的步骤。
代码中的instance
对象是通过hibernate(延迟加载)获取的对象。该对象不返回一个真正的java对象,而是一个hibernate代理对象。在代理对象上调用反射将会得到完全意想不到的结果。
在评论中https://stackoverflow.com/users/424903/gimby指出了一个解决方案,可以用来取消代理hibernate的延迟加载对象。将Hibernate代理转换为真实对象