HQL 查询取属性错误 class
HQL query take attribute from wrong class
我正在尝试执行以下查询:
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 中,不在用户中。这是我的休眠映射:
<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>
有人知道这里出了什么问题吗?
提前致谢
尝试对 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
我正在尝试执行以下查询:
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 中,不在用户中。这是我的休眠映射:
<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>
有人知道这里出了什么问题吗?
提前致谢
尝试对 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