Удалите динамично упорядочивание набору результатов в org.hibernate. Критерии

У меня есть Критерии с:

Criteria criteria= session.createCriteria(Libro.class).addOrder( Order.asc("ID") );

Однако, когда я хочу получить сбой rowcount:

criteria.setProjection(Projections.rowCount());  

потому что существует порядок в запросе.

Как удалить динамично упорядочивание в Критериях?

Я имею в виду, я ищу как criteria.removeOrder("ID").

5
задан usr-local-ΕΨΗΕΛΩΝ 19 November 2013 в 16:49
поделиться

2 ответа

Похоже, вы пытаетесь повторно использовать критерий, созданный для получения упорядоченного списка, чтобы вместо этого получить счетчик.

Вместо того, чтобы пытаться использовать одни и те же критерии для извлечения данных и для подсчета, вам, вероятно, лучше просто создать независимые критерии.

Используйте

Criteria orderCriteria= session.createCriteria(Libro.class)
                               .addOrder( Order.asc("ID") );

, чтобы получить список по порядку, и используйте

Criteria countCriteria= session.createCriteria(Libro.class)
                               .setProjection(Projections.rowCount());

, чтобы получить счетчики.

Чтобы использовать одни и те же критерии для двух целей, вы должны изменять состояние между использованиями. Я не знаю, как удалить заказ (или если это действительно необходимо для подсчета). Для удаления проекции требуется всего лишь setProjection (null) .

5
ответ дан 18 December 2019 в 14:44
поделиться

Если вы получаете критерии в качестве параметра и делаете некоторые вычисления с ними, вы можете использовать .Clone(), как здесь:

    private static int GetTotalRows(ICriteria criteria)
    {
        var countCriteria = (ICriteria)criteria.Clone();
        return Convert.ToInt32(countCriteria.SetProjection(Projections.RowCount()).UniqueResult());
    }

Другое решение - использовать ClearOrders, который удалит весь список заказов.

    private static int GetTotalRows(ICriteria criteria)
    {
        criteria.ClearOrders();
        ...
    }

С уважением

0
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: