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 = ?]
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top