我使用反射获取对象如下。这里我获取的字段是由休眠延迟加载映射的。
final Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
Object obj = field.get(instance);
然后我使用生成的对象如下
obj.getClass().getDeclaredFields()
但是这并不会返回Object中定义的所有字段。此Object可以是我的JPA实体列表中的任何实体。我相信使用Object而不是使用casted对象存在问题。
我该怎么做,并获取这个新找到的对象的所有字段。
答案 0 :(得分:0)
问题只是反射和Hibernate不能轻松完成。
代码中的instance
对象是由hibernate(延迟加载)获取的对象。该Object不返回真正的java对象,而是返回一个hibernate代理对象。在代理对象上调用Reflection会产生比你想要的完全出乎意料的结果。
在评论https://stackoverflow.com/users/424903/gimby中指出了一个解决方案,可用于解除对hibernate延迟加载对象的代理。 Converting Hibernate proxy to real object