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



使用反射获取对象如下:这里我获取的字段是通过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代理转换为真实对象

相关内容

  • 没有找到相关文章

最新更新