hibernate erreur d'éléments HQL
Question
Mon mappage HibernateUserImpl ressemble à celui présenté ci-dessous
<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>
Je fais une requête HQL comme
select distinct hibuser from HibernateUserImpl hibuser, hibuser.groups.elements hibgroup where hibuser.name = ? and hibgroup.name = ?
Je reçois une erreur pour hibuser.groups. éléments . Y a-t-il quelque chose qui me manque?
erreur dans la console
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 = ?]
La solution
Je pense que vous devez créer une jointure explicite.
select distinct hibuser
from HibernateUserImpl hibuser
join hibuser.groups hibgroup
where hibuser.name = ? and hibgroup.name = ?
Autres conseils
hibuser.groups est une collection, vous ne pouvez donc pas accéder à l'attribut de l'élément de la collection.
Ceci peut être illustré comme suit:
Liste des groupes = ...; groups.elements < - accès illégal aux fonctions.
Ainsi, pour accéder à hibuser.groups.elements , vous devez effectuer plusieurs jointures:
select element
from HibernateUserImpl hibuser
join hibuser.groups group
join group.elements element
where hibuser.name = ? and hibgroup.name = ? and element.whatever = something
Mais ici, vous sélectionnez uniquement sur hibuser, vous ne devez donc pas rejoindre d'autres collections. Si vous ne vous inscrivez pas, vous obtiendrez tout d’abord une requête plus rapide et vous évitez d’utiliser distinct. Essayez d'éviter autant que possible distinct.