Hibernate Lazy加载对象的getDeclaredFields()不返回字段

时间:2014-06-11 12:18:16

标签: java reflection

我使用反射获取对象如下。这里我获取的字段是由休眠延迟加载映射的。

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

然后我使用生成的对象如下

obj.getClass().getDeclaredFields()

但是这并不会返回Object中定义的所有字段。此Object可以是我的JPA实体列表中的任何实体。我相信使用Object而不是使用casted对象存在问题。

我该怎么做,并获取这个新找到的对象的所有字段。

1 个答案:

答案 0 :(得分:0)

问题只是反射和Hibernate不能轻松完成。

代码中的instance对象是由hibernate(延迟加载)获取的对象。该Object不返回真正的java对象,而是返回一个hibernate代理对象。在代理对象上调用Reflection会产生比你想要的完全出乎意料的结果。

在评论https://stackoverflow.com/users/424903/gimby中指出了一个解决方案,可用于解除对hibernate延迟加载对象的代理。 Converting Hibernate proxy to real object