Hibernate criteria query on different properties of different objects

criteria, hibernate, java

Solution

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

Problem

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.

Original source