2010-09-06 49 views
3

如何克隆標準對象?如何獲得可重用的Hibernate標準。

我已經創建了用於連接多個表並應用多個限制的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.?我如何實現?我不能克隆標準對象也可以。

回答

6

這已被重新投影結果實現,

pageCriteria.setTotalRecords(((Integer) criteria 
          .setProjection(Projections.rowCount()) 
          .uniqueResult()).intValue()); 
//Reset 
criteria.setProjection(null); 
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 

但我不確定是否在任何其他情況下失敗。

-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"))); 
+0

嗨,謝謝你的回覆。哪個版本的Hibernate是它的?我無法在我的代碼中獲得CriteriaTransformer類,它顯示error.Please幫助。 – Jothi 2010-09-06 09:54:11

+1

我想在休眠的解決方案。看起來,你發佈nHibernate – Jothi 2010-09-06 09:56:30

+0

對不起,因爲它是一個端口我希望同樣存在的Hibernate,但它似乎沒有。 – 2010-09-06 10:26:48