为什么我的Play Framework(1.2.4)计数查询失败?

时间:2012-01-23 22:40:18

标签: java hibernate jpa playframework

我有一个涉及标题和描述的简单模型。它扩展了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中   子句或用于聚合函数

为什么错误要求我在查询根本没有改变时使用聚合函数?

1 个答案:

答案 0 :(得分:4)

这是因为在第一个查询中,返回所有记录,然后在结果列表中计算。

在第二个查询中,计数在数据库中完成,因此必须正确形成sql。 我认为order by导致你描述的错误,尝试删除它。您正尝试在不属于返回的列上排序(计数返回数字而不是列)。

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