2012-01-23 109 views
2

我有一個涉及標題和說明的簡單模型。它擴展play.db.jpa.Model爲什麼我的Play Framework(1.2.4)計數查詢失敗?

下面的搜索方法,完美的作品

public static SearchResults search(String search, Integer page) { 
    String likeSearch = "%" + search + "%"; 
    long count = find("title like ? OR description like ? order by " + 
      "title ASC", likeSearch, likeSearch).fetch().size(); 
    List<Must> items = find("title like ? OR description like ? order by " + 
      "title ASC", likeSearch, likeSearch).fetch(page, 20); 
    return new SearchResults(items, count); 
} 

然而,當我調整數如下

long count = count("title like ? OR description like ? order by " + 
      "title ASC", likeSearch, likeSearch); 

我得到

PersistenceException occured : org.hibernate.exception.SQLGrammarException: could not execute query

ERROR ~ ERROR: column "must0_.title" must appear in the GROUP BY clause or be used in an aggregate function

爲什麼當查詢完全沒有改變時,是否要求我使用聚合函數?

回答

4

這是因爲在第一個查詢中,所有記錄都會返回並計入結果列表中。

在你的第二個查詢中,計數在數據庫中完成,所以你的sql必須正確地形成。 我認爲訂單由您造成的錯誤,請嘗試刪除它。您正嘗試在不屬於退貨部分的列上進行訂購(計數返回數字而非列)。

如果您需要查看生成的sql,可以在您的application.conf中設置jpa.debugSQL = true