【问题标题】:Why does my Play Framework (1.2.4) count query fail?为什么我的 Play Framework (1.2.4) 计数查询失败?
【发布时间】:2012-01-23 22:40:17
【问题描述】:

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

为什么在查询完全没有改变的情况下要求我使用聚合函数?

【问题讨论】:

    标签: java hibernate jpa playframework


    【解决方案1】:

    这是因为在第一次查询中,所有的记录都被返回,然后统计在结果列表中。

    在您的第二个查询中,计数是在数据库中完成的,因此您的 sql 必须正确形成。 我认为 order by 会导致您描述的错误,请尝试将其删除。您正在尝试在不属于退货的列上订购(计算退货编号而不是列)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2017-09-23
      相关资源
      最近更新 更多