内の要素の数でソートします。ビルJPAクライテリアAPIのクエリ - 私はJPAの基準APIを使用してクエリを構築すると、問題が生じていますコレクション
エンティティと重要な特性:
@Entity
public class Post {
@Id int id;
@OneToMany (mappedBy = "post") Set<Comment> comments;
//...
}
@Entity
public class Comment {
@Id int id;
@ManyToOne Post post;
//...
}
私は(Post
にOneToMany
)コメント数順DBからのすべての投稿を返しますクエリを必要としています。
SELECT p
FROM Post p
ORDER BY SIZE(p.comments) DESC
しかしSIZE(...)
がJPQL
で、それによって注文するために使用することはできません機能: は、最初に私がこのようなJPQL
で実現することができると思いました。
だから、私は約JPA Criteria API
を見つけて、次の試してみました:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Post> cq = cb.createQuery(Post.class);
Root<Post> p = cq.from(Post.class);
cq.select(p);
cq.orderBy(cb.desc(p.get("comments")));
List<Post> resultList = em.createQuery(cq).getResultList();
このクエリでは、私は適切な結果を得ていないのです。私はsize
のセットの「コメント」を紛失していることを認識していますが、その部分を追加する方法はわかりません。私はJPA Criteria API
をよく知っていません。このクエリは、すべての投稿をcomments
フィールド(セット)のサイズで注文するためにどのように見えるでしょうか?
あなたは、これは動作しませんよろしいです: 'cq.orderBy(。cb.desc(cb.size(P GET( "コメント")))); '? –
そうでなければ、私はあなたが 'Subquery'と[CriteriaBuilder.count(式)]を使用する必要がありますと思います(http://docs.oracle.com/javaee/7/api/javax/persistence/criteria/CriteriaBuilder.html# count(javax.persistence.criteria.Expression))。 –
は@MartinAnderssonはい、あなたが正しい、私は(。))cb.desc(cb.sizeた(p <コレクション>( "コメント")を取得) '' 一部なので、 'cq.orderByがあることがありませんでした;'です正しい。これを回答として投稿することができます。ありがとう。 –
Vladimir