【问题标题】:HQL query take attribute from wrong classHQL 查询从错误的类中获取属性
【发布时间】:2017-07-18 07:49:18
【问题描述】:

我正在尝试执行以下查询:

returnValue = (Long) super.createQuery("Select Count(*) From User u Left Outer Join u.rolesRelated r "
                    + "Where r.role.id = :roleId And u.id = :userId")
                    .setParameter("userId", userId)
                    .setParameter("roleId", roleId)
                    .getSingleResult(); 

但是我收到了这个错误:

 org.hibernate.QueryException: could not resolve property: role.id of: com.sp.common.core.model.User

此属性不存在,因为 role.id 在 user.rolesRelated 中,而不是在 user 中。这是我的休眠映射:

<class name="com.sp.common.core.model.User" table="user">
/* more meaningless properties */
        <set cascade="all" name="rolesRelated" sort="unsorted" table="sec_rperfil_usuario"
            lazy="false" fetch="join">
            <key column="id_usuario" />
            <composite-element class="com.sp.common.core.model.UserRole">
                <many-to-one name="role" class="com.sp.common.core.model.Role"
                    column="id_perfil" cascade="none" lazy="false" fetch="join" />
            </composite-element>
        </set>
</class>

有人知道这里出了什么问题吗?

提前致谢

【问题讨论】:

    标签: java hibernate hql hibernate-mapping


    【解决方案1】:

    尝试对 Role 进行另一个显式联接。

    SELECT COUNT(*) FROM User u LEFT OUTER JOIN u.rolesRelated rr 
    LEFT OUTER JOIN rr.role r WHERE r.id = :roleId And u.id = :userId
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 2021-01-31
      • 2016-04-21
      • 1970-01-01
      • 2015-09-20
      • 2014-07-02
      • 2012-12-29
      相关资源
      最近更新 更多