Frage

Meine HibernateUserImpl Abbildung aussehen wie unter

<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>

ich HQL-Abfrage wie

select distinct hibuser from HibernateUserImpl hibuser, hibuser.groups.elements  hibgroup where hibuser.name = ? and hibgroup.name = ?

Ich bekomme Fehler für hibuser.groups. Elemente . Gibt es etwas, ich verzichten?

Fehler in der Konsole

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 = ?]
War es hilfreich?

Lösung

Ich glaube, Sie brauchen einen expliziten machen verbindet .

    select distinct hibuser 
    from HibernateUserImpl hibuser
    join hibuser.groups hibgroup 
    where hibuser.name = ? and hibgroup.name = ?

Andere Tipps

hibuser.groups ist eine Sammlung, so können Sie nicht Ausprägungs des Elements der Kollektion zugreifen.

Dies kann wie dargestellt werden:

Liste Gruppen = ...; groups.elements . <- illegal Funktion Zugriff

So zum Zugriff hibuser.groups.elements , müssen Sie mehr Verknüpfungen tun:

select element 
from HibernateUserImpl hibuser 
join hibuser.groups group 
join group.elements element 
where hibuser.name = ? and hibgroup.name = ? and element.whatever = something

Aber hier nur Sie auf hibuser wählen, so sollten Sie sich nicht auf andere Sammlungen beitreten. Nicht Beitritt werden Sie zuerst eine schnellere Abfrage geben, und die Verwendung von verschiedenen zu vermeiden. Versuchen Sie zu vermeiden verschieden, so viel wie möglich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top