Re: Hibernate
От: lexius www.acula.org
Дата: 15.02.06 06:44
Оценка:
а теперь подробнее:

Нужна помощь с запросом в Hibernate
Столкнулся с такой проблемой:не могу правильно оформить запрос. Есть объект Catalog, который может хранить коллекцию ролей Set<Roles> userroles
так вот нужно выбрать все каталоги у которых либо нет ролей, либо роли нахосовпадают с другой коллекцией ролей.Как это сделать по отдельности я знаю. Для формирования сложных запросов я использую Criteria.
Для того, чтобы выбрать каталоги с пустыми ролями я делал примерно следующее (могу опечататься т.к. пишу по памяти).

cr.CreateCriteria(Catalog.class)
Restrictions.isEmpty("roles")


Для того, чтобы выбрать каталоги с ролями, совпадающими с диапазоном ролей я предварительно формировал коллекцию с именами ролей Set<String> names, с которыми должно быть совпадение, потом:
использовал субкритерию

.CreateCriteria("roles")
.add(Restrictions.in("name", names))


А как это совместить — не знаю. Как указать, что нужно либо то — либо другое.Пытался замутить нечто вроди:


...
.add( Restrictions.or( Restrictions.isEmpty("roles"), Restrictions.in("roles.name", names) ) )
...



так вот такое не проходит. Вся проблема в "roles.name" — пишет что не находит такого поля, то есть хибернейт не понимает, что нужно в коллекции объектов Roles проверять поле name.
Пробовал вариант:

Restrictions.or( Restrictions.isEmpty("roles"), Restrictions.in("roles", userroles) )


но тоже не получилось, видимо хибернейт не может такое делать.(в классе Roles и HashCode и isEquals и toString
создано как нтого требуется)
Народ, кому не впадло было это прочитать и кто разбирается — подскажите куда копать.
************
www.acula.org
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.