ошибка hibernate-элементов HQL
Вопрос
Мое отображение HibernateUserImpl выглядит следующим образом
<set name="groups" table="OS_USER_GROUP" inverse="false" cascade="none" lazy="false">
<key column="user_id"/>
<many-to-many column="group_id" class="com.opensymphony.user.provider.hibernate3.ahxu.impl.HibernateGroupImpl"/>
</set>
Я делаю HQL-запрос как
select distinct hibuser from HibernateUserImpl hibuser, hibuser.groups.elements hibgroup where hibuser.name = ? and hibgroup.name = ?
Я получил ошибку для hibuser.groups. elements . Есть ли что-то, что я пропускаю?
ошибка в консоли
org.hibernate.hql.ast.QuerySyntaxException: hibuser.groups.elements is not mappe
d [select distinct hibuser from com.opensymphony.user.provider.hibernate3.ahxu.i
mpl.HibernateUserImpl hibuser, hibuser.groups.elements hibgroup where hibuser.n
ame = ? and hibgroup.name = ?]
Решение
Я думаю, вам нужно сделать явное соединение .
select distinct hibuser
from HibernateUserImpl hibuser
join hibuser.groups hibgroup
where hibuser.name = ? and hibgroup.name = ?
Другие советы
hibuser.groups является коллекцией, поэтому вы не можете получить доступ к атрибуту элемента коллекции.
Это можно проиллюстрировать следующим образом:
Список групп = ...; groups.elements < - недопустимый доступ к функции.
Таким образом, чтобы получить доступ к hibuser.groups.elements , вам нужно сделать несколько соединений:
select element
from HibernateUserImpl hibuser
join hibuser.groups group
join group.elements element
where hibuser.name = ? and hibgroup.name = ? and element.whatever = something
Но здесь вы выбираете только hibuser, поэтому вам не следует присоединяться к другим коллекциям. Неприсоединение сначала даст вам более быстрый запрос и позволит избежать использования различных. Старайтесь избегать как можно большего различия.