使用Hibernate
,我得到List<BlablaPO>
(BlablaPO
实现Blabla
)。
当我做这样的事情时:
for(Blabla blabla : list) {
Class<?>[] interfazes = blabla.getClass().getInterfaces();
}
此代码只是接受Collection<T>
的一段代码的一部分。今天,我在新的List<Blabla>
上再次使用了这个代码,我的返回接口没有Blabla,而是我得到2个接口:
org.hibernate.proxy.HibernateProxy
javassist.util.proxy.ProxyObject
我错误地加载了这个系列吗?我试着热切地加载这个系列。
编辑: 我很确定这个问题是因为我懒惰地加载了我的收藏。
答案 0 :(得分:1)
这是因为Hibernate用代理您自己的类的生成类替换您的实例。例如,像:
这样的beanclass 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
的界面时,您将无法看到SomeInterface
,您必须先导航至SomeInterface
。然而,条件foo instanceOf SomeInterface
将继续存在,并且可能是您想要的目标。
答案 1 :(得分:0)
我的问题是我懒洋洋地装了一切。解决方案是正确加载所有内容,这导致代码100%完美地工作:)。