我有一个涉及标题和描述的简单模型。它扩展了play.db.jpa.Model
以下搜索方法完美无缺
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: org.hibernate.exception.SQLGrammarException:无法执行查询
ERROR_ERROR:列“must0_.title”必须出现在GROUP BY中 子句或用于聚合函数
为什么错误要求我在查询根本没有改变时使用聚合函数?
答案 0 :(得分:4)
这是因为在第一个查询中,返回所有记录,然后在结果列表中计算。
在第二个查询中,计数在数据库中完成,因此必须正确形成sql。 我认为order by导致你描述的错误,尝试删除它。您正尝试在不属于返回的列上排序(计数返回数字而不是列)。
如果需要查看生成的sql,可以在application.conf中设置 jpa.debugSQL = true 。