überwintern HQL Elemente error
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 = ?]
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.