質問

私のHibernateUserImplマッピングは次のようになります

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

私は

のようなHQLクエリを実行します
select distinct hibuser from HibernateUserImpl hibuser, hibuser.groups.elements  hibgroup where hibuser.name = ? and hibgroup.name = ?

hibuser.groups。 elements でエラーが発生します。逃したものはありますか?

コンソールのエラー

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 = ?]
役に立ちましたか?

解決

明示的な参加を行う必要があると思います。

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

他のヒント

hibuser.groups はコレクションであるため、コレクションの要素の属性にアクセスできません。

これは次のように示すことができます:

リストグループ= ...; groups.elements <!> lt;-不正な関数アクセス。

したがって、 hibuser.groups.elements にアクセスするには、複数の結合を行う必要があります:

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

ただし、ここではhibuserのみを選択するため、他のコレクションには参加しないでください。参加しないと、最初にクエリが高速になり、distinctの使用が回避されます。できるだけ区別しないようにしてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top