我有一个hibernate对象User,它与另一个名为hibernate的对象有多对多的关系Post.这种关系被称为likedPosts(从User角度来看).
<set name="likedPosts" lazy="true" table="Likes" where="Deleted=0">
<cache usage="read-write"/>
<key column="UserID"/>
<many-to-many column="PostID" class="Post"/>
</set>
Run Code Online (Sandbox Code Playgroud)
目前我有一个简单的HQL查询来返回喜欢的帖子列表,如下所示:
"select user.likedPosts from User user where user.id=:uid"
Run Code Online (Sandbox Code Playgroud)
我想要的是让这个列表由Post对象中的属性(特别是post id)排序.我(天真)尝试这样做是这样的:
"select user.likedPosts from User user where user.id=:uid
order by user.likedPosts.id desc"
Run Code Online (Sandbox Code Playgroud)
这不起作用 - 我得到一个例外,告诉我我不允许这样做.我该怎么做呢?谢谢!
堆栈跟踪错误:
org.hibernate.QueryException: illegal attempt to dereference collection [user0_.ID.likedPosts] with element property reference [id] [select user.likedPosts from com.pashash.domain.User user where user.id=:uid order by user.likedPosts.id desc]
at org.hibernate.hql.ast.tree.DotNode$1.buildIllegalCollectionDereferenceException(DotNode.java:46)
at org.hibernate.hql.ast.tree.DotNode.checkLhsIsNotCollection(DotNode.java:513)
at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:221)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)
at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:728)
...
Run Code Online (Sandbox Code Playgroud)
您需要显式连接才能执行此操作:
select post from User user
inner join user.likedPosts post
where user.id = :userId
order by post.id desc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1487 次 |
| 最近记录: |