Вопрос

Мое отображение 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, поэтому вам не следует присоединяться к другим коллекциям. Неприсоединение сначала даст вам более быстрый запрос и позволит избежать использования различных. Старайтесь избегать как можно большего различия.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top