2016-11-12 6 views
1

と私は名前のクエリblog.findBlogs JPAグループは、複数のフィールド

を使用している間、次のエラーを取得していますことで、「あなたの選択となる句はまた、あなたのグループ化句に表示される凝集体または値を含める必要があります。」

私はb.idを使用していますので、このクエリーをエラーなく実行できるようにする必要があります。私はまた、mysqlのworkbenchとその完全に正常に動作する同じクエリを試してみました。

@NamedQueries(value = { 
     @NamedQuery (name = "blog.findBlogs", query = "SELECT " + 
          "NEW com.vo.Blog(b.id, b.blogId, b.createDate, b.tags, b.url, COUNT(r.emotion)) " + 
          "FROM Blog b JOIN b.rates r " + 
          "GROUP BY b.id") 
}) 

に関しては、アミットJ.は

答えて

0

は一般的には、SQLでGROUP BYクエリは、SELECT節に現れるすべてがいずれかのGROUP BY句に現れまたは集計関数内でなければならないというルールに従わなければなりませんCOUNTなどです。

I also tried same query from mysql workbench and its working perfectly fine.

このルールを適用しないいくつかのデータベースの1つです。しかし、JPAはこれを許可していないようですので、基盤となるデータベースがMySQLの怠惰なバージョンであってもJPAからの実行に失敗します。ここで

は、エラーなしで実行するようにコードを修正することができる方法です。

@NamedQueries(value = { 
    @NamedQuery (name = "blog.findBlogs", query = "SELECT " + 
         "NEW com.vo.Blog(b.id, COUNT(r.emotion)) " + 
         "FROM Blog b JOIN b.rates r " + 
         "GROUP BY b.id") 
}) 

あなたが元のクエリとの論理的な問題が何であったか迷っているならば、それは与えられたb.id値、JPAのために、ということですを把握することはできませんどのようなブログ、日付、およびタグは、そのグループのために選択する価値。

+0

ご回答いただきありがとうございます。 select句では、私は他のフィールドに興味があり、Idではlongです。 –

+0

あなたが求めていることは意味をなさない。 _他にも値がありますか?各IDグループに保持する値を決定するためのロジックを提供する必要があります。 –

+0

グループの外観は b.id、b.blogId、b.creatateDate、b.tags、b.url の代わりに に変更する必要があります。b.id 基本的には、ブログのVOに格付けレートエンティティから。ブログは複数のユーザーでレートすることができます –