Почему мой запрос подсчета Play Framework (1.2.4) не выполняется? - PullRequest
2 голосов
/ 24 января 2012

У меня есть простая модель, включающая заголовок и описание.Это расширяет 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: не удалось выполнить запрос

ОШИБКА ~ ОШИБКА: столбец "must0_.title" должен появляться в предложении GROUP BY или использоваться вагрегатная функция

Почему ошибка заставляет меня использовать агрегатную функцию, если запрос вообще не изменился?

1 Ответ

4 голосов
/ 24 января 2012

Это связано с тем, что в первом запросе все записи возвращаются, а затем подсчитываются в списке результатов.

Во втором запросе подсчет производится в базе данных, поэтому ваш sql должен быть сформирован правильно. Я думаю, что заказ вызывает ошибку, которую вы описали, попробуйте удалить ее. Вы пытаетесь сделать заказ по столбцу, который не является частью возврата (количество возвращаемых номеров, а не столбцов).

Вы можете установить jpa.debugSQL = true в вашем application.conf, если вам нужно увидеть сгенерированный sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...