[英]Hibernate criteria query on different properties of different objects
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: 我想在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));
What I want to do is combine criteriaB and criteriaC using an "or" clause, something like: 我想要做的是使用“或”子句组合criteriaB和criteriaC,如:
//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.
我在这里绊倒了一些API。
You only need to create one criteria object like so. 您只需创建一个标准对象,就像这样。
Criteria criteria = session.createCriteria(A.class);
criteria.add(Restriction.disjunction()
.add(Restriction.eq("b.foo", "something"))
.add(Restriction.eq("c.bar", 0)));
In case someone else finds it useful, I found a more complicated answer to the problem which appears to be allowed by the API, though I did not get to test it before ChssPly posted his (simpler) solution: 如果其他人发现它有用,我发现了一个更复杂的问题答案,这似乎是API所允许的,尽管我没有在ChssPly发布他的(更简单的)解决方案之前测试它:
DetachedCriteria bValues = DetachedCriteria.forClass(A.class);
bValues.createCriteria("b").add(Restrictions.eq("foo", "something"));
DetachedCriteria cValues = DetachedCriteria.forClass(A.class);
cValues.createCriteria("c").add(Restrictions.eq("bar", 0));
Restrictions.or(Subqueries.in("id", bValues), Subqueries.in("id", cValues));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.