mam model danych, który wygląda mniej więcej tak:Hibernacja kwerendy dla wielu elementów w kolekcji
public class Item {
private List<ItemAttribute> attributes;
// other stuff
}
public class ItemAttribute {
private String name;
private String value;
}
(to oczywiście upraszcza dala dużo obcego materiału)
co chcę zrobić to stwórz zapytanie, aby poprosić o wszystkie przedmioty z jednym LUB WIĘCEJ konkretnych atrybutów, idealnie połączone z dowolnymi AND i OR. W tej chwili trzymam to prosto i próbuję zaimplementować przypadek ORAZ. W pseudo-SQL (lub pseudo-HQL jeśli będzie), to byłoby coś takiego:
select all items
where attributes contains(ItemAttribute(name="foo1", value="bar1"))
AND attributes contains(ItemAttribute(name="foo2", value="bar2"))
przykładów w docs Hibernate nie wydaje się do rozwiązania tego konkretnego przypadku użycia, ale wydaje się dość wspólny. Sprawa alternatywą byłoby również przydatne, zwłaszcza tak mogę określić listę możliwych wartości, tj
where attributes contains(ItemAttribute(name="foo", value="bar1"))
OR attributes contains(ItemAttribute(name="foo", value="bar2"))
-- etc.
Oto przykład, który działa OK dla jednego atrybutu:
return getSession().createCriteria(Item.class)
.createAlias("itemAttributes", "ia")
.add(Restrictions.conjunction()
.add(Restrictions.eq("ia.name", "foo"))
.add(Restrictions.eq("ia.attributeValue", "bar")))
.list();
Uczenie się, jak to zrobić pójdzie długą drogę w kierunku poszerzenia mojej wiedzy na temat potencjału Hibernate. :)
Odpowiedź tutaj działa: http://stackoverflow.com/questions/4834372/hibernate-criteria-on-collection-values – Taylor