Hibernate标准查询不同对象的不同属性 [英] Hibernate criteria query on different properties of different objects

查看:97
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆