【问题标题】:hibernate HQL elements error休眠 HQL 元素错误
【发布时间】:2009-10-26 07:09:21
【问题描述】:

我的 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 = ?]

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    我认为您需要明确加入

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

    【讨论】:

      【解决方案2】:

      hibuser.groups 是一个集合,因此您无法访问该集合元素的属性。

      这可以这样说明:

      列出组 = ...; groups.elements

      因此要访问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。尽量避免不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        • 2013-12-27
        • 1970-01-01
        • 2018-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多