Hibernate标准如何查询不同对象的不同属性?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (53)

假设我有类:

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));

我怎样才能做到这一点?

提问于
用户回答回答于
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"))
 );
用户回答回答于

只需要创建一个条件对象:

Criteria criteria = session.createCriteria(A.class);
criteria.add(Restriction.disjunction()
    .add(Restriction.eq("b.foo", "something"))
    .add(Restriction.eq("c.bar", 0)));

扫码关注云+社区

领取腾讯云代金券