java - Hibernate criteria 查询不同对象的不同属性

标签 java hibernate criteria

假设我有这样的类:

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 上遇到了一些问题。

最佳答案

使用aliases而不是嵌套标准:

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

关于java - Hibernate criteria 查询不同对象的不同属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1528352/

相关文章:

Java Hibernate暂时忽略带有条件的@ManyToOne注释

java - 如何在 Java 中创建函数 "timeoutable"?

java - 当大小 < 2 时,MyObject[] 返回 json 对象而不是数组

java - Hibernate 实体扩展基类,为实体形成的表没有基类中的属性列

hibernate - 如何为按关系计数(一对多)排序的所有实例创建条件?

带有元组表达式的子句中的 JPA 条件

java - Spring 启动: delegateBuilder cannot be null on autowiring authenticationManager in custom UserDetailsService

java - 我的调色板中的小部件标题(例如(TexField、布局、表单小部件以及图像和媒体))为空,我该如何解决此问题?178173

java - 分离的实体未正确合并?

java - org.hibernate.exception.JDBCConnectionException : Cannot open connection