2016-11-12 89 views
1

我收到以下錯誤,同時使用命名查詢blog.findBlogsJPA集團通過與多個現場

「你的選擇和having子句必須只包括集合或值也出現在分組子句。」

在select子句中,我使用了b.id,所以它必須允許無誤地執行這個查詢。我也嘗試從MySQL工作臺相同的查詢和它的工作完全正常。

@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

一般而言,GROUP BY查詢SQL中必須遵守的規則出現的SELECT子句中的一切必須要麼出現在GROUP BY子句中或者是一個聚集函數裏面,如COUNT

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

事實證明,MySQL是少數幾個不執行這條規則的數據庫之一。但是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很感興趣。 –

+0

你的問題沒有意義。你想要哪些其他值?您需要提供確定爲每個ID組保留哪個值的邏輯。 –

+0

它看起來像group by應改爲 b.id,b.blogId,b.createDate,b.tags,b.url 而不是隻有 b.id 基本上我想填充博客VO以及它的評級來自費率實體。博客可以由多個用戶評分 –