使用Hibernate
,我得到一个List<BlablaPO>
( BlablaPO
实现 Blabla
)。
当我做这样的事情时:
for(Blabla blabla : list) {
Class<?>[] interfazes = blabla.getClass().getInterfaces();
}
这段代码只是接受Collection<T>
的一段代码的一部分。 。今天,我在新的List<Blabla>
上再次使用了这段代码。 ,我返回的接口(interface)中没有 Blabla,而是得到 2 个接口(interface):
- 界面
org.hibernate.proxy.HibernateProxy
- 界面
javassist.util.proxy.ProxyObject
我是否错误地加载了集合?我尝试急切地加载该集合。
编辑: 我相当确定问题是因为我延迟加载了我的集合。
最佳答案
发生这种情况是因为 Hibernate 将您的实例替换为代理您自己的类的生成类。例如,像这样的 bean:
class Foo implements SomeInterface {
@OneToMany
public List<MyBean> getBar() { ... }
}
将由 Hibernate 进行子类化,类似于以下类:
class Foo$Hibernate extends Foo implements HibernateProxy, ProxyObject {
@Override
public String getBar() { Hibernate.loadFromDBOnDemand(); }
}
当你请求Foo$Hibernate
的接口(interface)时,您将看不到SomeInterface
,您必须首先导航至 SomeInterface
。病情foo instanceOf SomeInterface
但会继续持有,并且可能是您想要的。
关于java - 反射 - getInterfaces() 显示奇怪的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567572/