que porque polares osos migran los imagenes humana hibernan hibernaciĆ³n como animales java hibernate criteria

java - polares - porque hibernan los animales



Consulta de criterios de hibernaciĆ³n sobre diferentes propiedades de diferentes objetos. (3)

En caso de que otra persona lo encuentre útil, encontré una respuesta más complicada al problema que parece estar permitido por la API, aunque no pude probarlo antes de que ChssPly publicara su (más simple) solución:

DetachedCriteria bValues = DetachedCriteria.forClass(A.class); bValues.createCriteria("b").add(Restrictions.eq("foo", "something")); DetachedCriteria cValues = DetachedCriteria.forClass(A.class); cValues.createCriteria("c").add(Restrictions.eq("bar", 0)); Restrictions.or(Subqueries.in("id", bValues), Subqueries.in("id", cValues));

Supongamos que tengo clases como:

class A { B getB(); C getC(); } class B { String getFoo(); } class C { int getBar(); }

y quiero filtrar los criterios en A, dos filtros en diferentes propiedades de subclases, como:

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

Lo que quiero hacer es combinar los criterios B y los criterios C usando una cláusula "o", algo como:

//this does not work criteriaA.add(Restrictions.disjunction().add(criteriaB).add(criteriaC));

¿Cómo puedo lograr esto? Estoy tropezando un poco con la API aquí.


Solo necesitas crear un objeto de criterio como tal.

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


Utilice aliases lugar de criterios anidados:

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