hibernate HQL erro elementos
Pergunta
Meu HibernateUserImpl mapeamento olhar como abaixo
<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>
Eu faço consulta HQL como
select distinct hibuser from HibernateUserImpl hibuser, hibuser.groups.elements hibgroup where hibuser.name = ? and hibgroup.name = ?
Eu recebo erro para hibuser.groups. elementos . Existe algo que eu perder?
erro na consola
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 = ?]
Solução
Eu acho que você precisa fazer um explícita join .
select distinct hibuser
from HibernateUserImpl hibuser
join hibuser.groups hibgroup
where hibuser.name = ? and hibgroup.name = ?
Outras dicas
hibuser.groups é uma coleção, portanto, você não pode acessar attribut do elemento da coleção.
Isto pode ser ilustrado como:
grupos Lista = ...; groups.elements <-. Acesso função ilegal
Assim, para o acesso hibuser.groups.elements , você precisa fazer várias associações:
select element
from HibernateUserImpl hibuser
join hibuser.groups group
join group.elements element
where hibuser.name = ? and hibgroup.name = ? and element.whatever = something
Mas aqui você selecionar apenas em hibuser, portanto, você não deve se juntar em outras coleções. Não aderir, em primeiro lugar dar-lhe uma consulta mais rápida, e uso evitar de distinta. Tente evitar distinta, tanto quanto possível.