Remote dynamic result set ordering in org.hibernate.Criteria

I have criteria with:

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

However, when I want the line failure to fail:

criteria.setProjection(Projections.rowCount());  

because there is a request in the request.

How to dynamically remove order in criteria?

I mean, I'm looking for how criteria.removeOrder("ID").

+5
source share
6 answers

Most criteria are actually CriteriaImpl examples. If you drop your CriteriaImpl criteria and get an iterator for orders, you can delete them this way.

Criteria criteria= session.createCriteria(Libro.class).addOrder( Order.asc("ID") );
Iterator<Order> orderIter = ((CriteriaImpl)criteria).iterateOrderings();
while (orderIter.hasNext()) {
    orderIter.next();
    orderIter.remove();
}

Long totalRows = (Long)criteria.setProjection(Projections.rowCount()).uniqueResult();
+6
source

It looks like you are trying to reuse the criteria made to get an ordered list, instead get the score.

, , , , .

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

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

.

, . , ( ). setProjection(null).

+5

.. ,

,

criteria.addOrder(pageCriteria.isSortDescending() ? Order
                            .desc(pageCriteria.getSortBy()) : Order
                            .asc(pageCriteria.getSortBy()));

pageCriteria.setTotalRecords(((Integer) criteria
                            .setProjection(Projections.rowCount())
                            .uniqueResult()).intValue());
                criteria.setProjection(null);
                criteria.setFirstResult(
                        pageCriteria.getFirstRecordOfCurrentPage())
                        .setMaxResults(pageCriteria.getRecordsPerPage());
                criteria
                        .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

.

+1

criteria.ClearOrders() - NHibernate, .

Java . Order, Criteria .

+1

, , .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

. , Order [] , .

, db - db2 as400 , select count(*).

0

All Articles