我的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错误。元素。我有什么遗漏的吗?

控制台中的

错误

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