我使用spring和cglib,我有这些类:
public class A {
.
.
private Souscripteur souscripteur;
private List<B> contrat;
// getter and setter
}
public class B {
.
.
private Souscripteur souscripteur;
//getter and setter
}
并且A类和B类具有相同的souscripteur,所以当我加载A类并尝试加载B类时,我得到了B类EnhancerByCGLIB的Souscripteur。
为此,当我尝试这样做时:
if(b.getSouscriteur() instanceof PersonnePhysique) {
//do something
} else {
//do nothing
}
当我检查代码时,增强的对象是PersonnePhysique,但是如果(b.getSouscriteur()instanceof PersonnePhysique)返回false
我的班级PersonnePhysique是这样的:
public class PersonnePhysique extends Souscriteur {
//
}
答案 0 :(得分:0)
Hibernate根据声明的预期类型(Souscripteur
)生成代理,因此您将获得延迟Souscripteur
的延迟加载代理 - 因此PersonnePhysique
中没有instanceof
1}}感觉。
你必须避免在这里测试具体类型,而是在你的实体上调用多态方法(顺便说一句,这是更面向对象的)。
如果您调用方法doSomething()
,您的用例将变为:
b.getSouscriteur().doSomething()
具有以下实现:
public class Souscripteur {
public void doSomething() {
// do nothing
}
}
public class PersonnePhysique extends Souscripteur {
@Override
public void doSomething() {
// do something here
}
}