sil*_*ier 5 hibernate criteria
我有一个标准:
Criteria criteria= session.createCriteria(Libro.class).addOrder( Order.asc("ID") );
Run Code Online (Sandbox Code Playgroud)
但是,当我想让rowcount失败时:
criteria.setProjection(Projections.rowCount());
Run Code Online (Sandbox Code Playgroud)
因为查询中有一个订单.
如何动态删除条件中的排序?
我的意思是,我正在寻找criteria.removeOrder("ID").
小智 6
大多数标准实际上是CriteriaImpl的实例.如果将Criteria转换为CriteriaImpl并获取订单的迭代器,则可以将其删除.
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();
Run Code Online (Sandbox Code Playgroud)
听起来你正在尝试重新使用为获取有序列表而制定的Criteria而不是计数.
您可能最好只创建独立的Criteria,而不是尝试使用相同的Criteria来检索数据和进行计数.
使用
Criteria orderCriteria= session.createCriteria(Libro.class)
.addOrder( Order.asc("ID") );
Run Code Online (Sandbox Code Playgroud)
按顺序检索列表,并使用
Criteria countCriteria= session.createCriteria(Libro.class)
.setProjection(Projections.rowCount());
Run Code Online (Sandbox Code Playgroud)
获得计数.
为了两个目的使用相同的Criteria,您必须更改用法之间的状态.我不确定如何删除订单(或者如果你真的需要为了计算).要删除投影,只需要setProjection(null).
| 归档时间: |
|
| 查看次数: |
4484 次 |
| 最近记录: |