我使用的是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
}当我检查代码时,增强的对象是一个实例,但如果(b.getSouscriteur() PersonnePhysique if)返回false
我的类PersonnePhysique是这样的:
public class PersonnePhysique extends Souscriteur {
//
}发布于 2015-01-05 22:37:49
Hibernate基于声明的预期类型(Souscripteur)生成代理,因此您将获得一个扩展Souscripteur的延迟加载代理-因此,没有instanceof意义上的PersonnePhysique。
你必须避免在这里测试具体的类型,而是在你的实体上调用多态方法(顺便说一句,这是更面向对象的)。
如果您正在调用一个方法doSomething(),那么您的用例将变成:
b.getSouscriteur().doSomething()使用以下实现:
public class Souscripteur {
public void doSomething() {
// do nothing
}
}
public class PersonnePhysique extends Souscripteur {
@Override
public void doSomething() {
// do something here
}
}https://stackoverflow.com/questions/27780800
复制相似问题