У меня есть Критерии с:
Criteria criteria= session.createCriteria(Libro.class).addOrder( Order.asc("ID") );
Однако, когда я хочу получить сбой rowcount:
criteria.setProjection(Projections.rowCount());
потому что существует порядок в запросе.
Как удалить динамично упорядочивание в Критериях?
Я имею в виду, я ищу как criteria.removeOrder("ID")
.
Похоже, вы пытаетесь повторно использовать критерий, созданный для получения упорядоченного списка, чтобы вместо этого получить счетчик.
Вместо того, чтобы пытаться использовать одни и те же критерии для извлечения данных и для подсчета, вам, вероятно, лучше просто создать независимые критерии.
Используйте
Criteria orderCriteria= session.createCriteria(Libro.class)
.addOrder( Order.asc("ID") );
, чтобы получить список по порядку, и используйте
Criteria countCriteria= session.createCriteria(Libro.class)
.setProjection(Projections.rowCount());
, чтобы получить счетчики.
Чтобы использовать одни и те же критерии для двух целей, вы должны изменять состояние между использованиями. Я не знаю, как удалить заказ (или если это действительно необходимо для подсчета). Для удаления проекции требуется всего лишь setProjection (null)
.
Если вы получаете критерии в качестве параметра и делаете некоторые вычисления с ними, вы можете использовать .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();
...
}
С уважением