tengo un modelo de datos que se ve algo como esto:consulta de Hibernate por varios elementos en una colección
public class Item {
private List<ItemAttribute> attributes;
// other stuff
}
public class ItemAttribute {
private String name;
private String value;
}
(esto obviamente simplifica la distancia de un montón de cosas extrañas)
Lo que yo quiero hacer es crear una consulta para pedir todos los artículos con uno o más atributos particulares, idealmente unidos con ANDs y OR arbitrarios. En este momento lo estoy manteniendo simple y estoy tratando de implementar el caso AND. En pseudo-SQL (o pseudo-HQL si lo haría), sería algo así como:
select all items
where attributes contains(ItemAttribute(name="foo1", value="bar1"))
AND attributes contains(ItemAttribute(name="foo2", value="bar2"))
Los ejemplos en la documentación de Hibernate no parecía hacer frente a este caso en particular, pero parece bastante uno común. El caso disyunción también sería útil, sobre todo por lo que podría especificar una lista de valores posibles, es decir
where attributes contains(ItemAttribute(name="foo", value="bar1"))
OR attributes contains(ItemAttribute(name="foo", value="bar2"))
-- etc.
He aquí un ejemplo que funciona bien para un solo atributo:
return getSession().createCriteria(Item.class)
.createAlias("itemAttributes", "ia")
.add(Restrictions.conjunction()
.add(Restrictions.eq("ia.name", "foo"))
.add(Restrictions.eq("ia.attributeValue", "bar")))
.list();
aprendizaje de cómo hacer esto Haría un largo camino para ampliar mi comprensión del potencial de Hibernate. :)
La respuesta aquí funciona: http://stackoverflow.com/questions/4834372/hibernate-criteria-on-collection-values – Taylor