如何克隆条件对象?
我创建了Criteria对象,用于连接多个表并应用多个限制。然后我需要基于所应用的限制的记录总数。然后我需要应用分页细节(通过设置maxList)并且必须检索对象列表。
Criteria criteria = session.createCriteria(Property.class, "property")
.createAlias("property.propertyType", "type").createAlias(
"property.propertyConcern", "propertyConcern",
CriteriaSpecification.LEFT_JOIN).createAlias(
"propertyConcern.concern", "concern",
CriteriaSpecification.LEFT_JOIN).setResultTransformer(
CriteriaSpecification.DISTINCT_ROOT_ENTITY);
criteria = addMultipleSeachCriteria(criteria, condition);
criteria.setFirstResult(
pageCriteria.getFirstRecordOfCurrentPage())
.setMaxResults(pageCriteria.getRecordsPerPage());
criteria.addOrder(pageCriteria.isSortDescending() ? Order
.desc(pageCriteria.getSortBy()) : Order
.asc(pageCriteria.getSortBy()));
当我运行这个时,我得到了我预期的结果。但我需要获取应用限制的记录数量而不应用order by和setmaxResults。我如何实现?我也无法克隆条件对象..
答案 0 :(得分:6)
这是通过重置投影结果来实现的,
pageCriteria.setTotalRecords(((Integer) criteria
.setProjection(Projections.rowCount())
.uniqueResult()).intValue());
//Reset
criteria.setProjection(null);
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
但我不确定在任何其他情况下是否失败。
答案 1 :(得分:-1)
以下是我在NHibernate中的表现
DetachedCriteria newCriteria = CriteriaTransformer.TransformToRowCount(criteria);
此外,如果您想添加一些其他信息,例如SUM,您可以添加带有这样的投影的信息:
newCriteria.SetProjection(Projections.ProjectionList()
.Add(Projections.RowCount(), "rows")
.Add(Projections.Sum("TaxAmount.Decimal"))
.Add(Projections.Sum("NetAmount.Decimal"))
.Add(Projections.Sum("GrossAmount.Decimal")));