Hibernate标准查询不同对象的不同属性 [英] Hibernate criteria query on different properties of different objects
本文介绍了Hibernate标准查询不同对象的不同属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
class A {
B getB();
C getC();
}
class B {
String getFoo();
}
class C {
int getBar();
}
我想过滤A上的条件,不同子类属性上的两个过滤器,例如:
Criteria criteriaA = session.createCriteria(A.class);
Criteria criteriaB = criteriaA.createCriteria(b).add(Restrictions.eq(foo,Something));
Criteria criteriaC = criteriaA.createCriteria(c).add(Restrictions.eq(bar,0));
我想要做的是使用or子句结合criteriaB和criteriaC,如:
//这不起作用
criteriaA.add(Restrictions.disjunction()。add(criteriaB).add( criteriaC));
我该如何做到这一点?
解决方案
使用别名而不是嵌套标准:
Criteria criteria = session.createCriteria(A.class)
.createAlias(b,b_alias)
.createAlias(c,c_alias )
.add(Restrictions.disjunction()
.add(Restrictions.eq(b_alias.foo,Something))
.add(Restrictions.eq(c_alias。 bar,0))
);
Suppose I have classes like:
class A {
B getB();
C getC();
}
class B {
String getFoo();
}
class C {
int getBar();
}
and I want to filter criteria on A, two filters on different subclass properties, like:
Criteria criteriaA = session.createCriteria(A.class);
Criteria criteriaB = criteriaA.createCriteria("b").add(Restrictions.eq("foo", "Something"));
Criteria criteriaC = criteriaA.createCriteria("c").add(Restrictions.eq("bar", 0));
What I want to do is combine criteriaB and criteriaC using an "or" clause, something like:
//this does not work
criteriaA.add(Restrictions.disjunction().add(criteriaB).add(criteriaC));
How can I accomplish this? I am stumbling a little over the API here.
解决方案
Use aliases instead of nested criteria:
Criteria criteria = session.createCriteria(A.class)
.createAlias("b", "b_alias")
.createAlias("c", "c_alias")
.add(Restrictions.disjunction()
.add(Restrictions.eq("b_alias.foo", "Something"))
.add(Restrictions.eq("c_alias.bar", "0"))
);
这篇关于Hibernate标准查询不同对象的不同属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文