假设我有类似的课程:
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));
我想要做的是使用“或”子句将criteriaB和criteriaC组合在一起,例如:
//this does not work criteriaA.add(Restrictions.disjunction().add(criteriaB).add(criteriaC));
我该怎么做?我在这里对API稍作绊脚石。
使用别名代替嵌套条件:
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")) );