У меня есть модель данных, которая выглядит примерно так:
public class Item {
private List<ItemAttribute> attributes;
// other stuff
}
public class ItemAttribute {
private String name;
private String value;
}
(это, очевидно, упрощает многие посторонние вещи)
Что я хочу сделать, это создать запросзапрашивать все элементы с одним или более определенными атрибутами, в идеале соединенные с произвольными AND и OR.Прямо сейчас я держу это простым и просто пытаюсь реализовать случай AND.В псевдо-SQL (или псевдо-HQL, если хотите) это будет выглядеть примерно так:
select all items
where attributes contains(ItemAttribute(name="foo1", value="bar1"))
AND attributes contains(ItemAttribute(name="foo2", value="bar2"))
Примеры в документах Hibernate, похоже, не касаются этого конкретного варианта использования, но похоже, чтодовольно распространенный.Случай дизъюнкции также будет полезен, особенно для того, чтобы я мог указать список возможных значений, например
where attributes contains(ItemAttribute(name="foo", value="bar1"))
OR attributes contains(ItemAttribute(name="foo", value="bar2"))
-- etc.
Вот пример, который хорошо работает для одного атрибута:
return getSession().createCriteria(Item.class)
.createAlias("itemAttributes", "ia")
.add(Restrictions.conjunction()
.add(Restrictions.eq("ia.name", "foo"))
.add(Restrictions.eq("ia.attributeValue", "bar")))
.list();
Обучениекак это сделать, во многом расширит мое понимание потенциала Hibernate.:)