3

と呼ばUserれる別のHibernateオブジェクトと多対多の関係を持つと呼ばれるHibernateオブジェクトがありますPost。関係はlikedPostsUser観点から)呼び出されます。

<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>

そして現在、私は次のようにいいねされた投稿のリストを返すための簡単なHQLクエリを持っています:

"select user.likedPosts from User user where user.id=:uid"

私が欲しいのは、このリストをPostオブジェクト内のプロパティ(具体的には投稿ID)の順に並べることです。これを行うための私の(素朴な)試みはこれでした:

"select user.likedPosts from User user where user.id=:uid 
        order by user.likedPosts.id desc"

ただし、これは機能しません。これを行うことは許可されていないという例外が発生します。どうすればこれを行うことができますか?ありがとう!

エラーのスタックトレース:

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)
    ...
4

1 に答える 1

6

これを行うには、明示的な結合が必要です。

select post from User user
inner join user.likedPosts post
where user.id = :userId
order by post.id desc
于 2012-10-08T12:22:28.547 に答える