2012-05-22 33 views
0

我想寫使用投影以下SQL休眠休眠投影returing結果作爲對象

SELECT id, name, MAX(ver) 
    FROM bizterm 
WHERE name ILIKE '%AB%' 
GROUP BY name, id order by name asc 

我已經寫了下面的代碼

Session session=sessionFactory.getCurrentSession(); 
      Criteria criteria=session.createCriteria(BizTerm.class); 
      criteria.add(Restrictions.ilike("name", searchString,MatchMode.ANYWHERE)); 
      criteria.addOrder(Order.asc("name")); 
      ProjectionList projList=Projections.projectionList(); 
      projList.add(Projections.max("ver")); 
      projList.add(Projections.groupProperty("id")); 
      projList.add(Projections.groupProperty("name")); 
      criteria.setProjection(projList); 

在表的id,版本是PKEY。 這個查詢運行良好,但結果我得到只有3列的價值是ver,id,名稱也如Object,BizTerm表中還有其他列如狀態,級別這些值沒有得到返回的結果組。我怎樣才能得到那些使用投影?我試過projList.add(Projections.property("status"));但它不工作。 我想執行這個查詢

SELECT id, name,status,level MAX(ver) 
    FROM bizterm 
WHERE name ILIKE '%AB%' 
GROUP BY name, id order by name asc using projection in hibernate 

回答

1

不喜歡this..now其工作沒有錯誤

Criteria criteria=session.createCriteria(BizTerm.class); 
      criteria.add(Restrictions.ilike("bizTermName", searchString,MatchMode.ANYWHERE)); 
      criteria.addOrder(Order.asc("bizTermName")); 
      ProjectionList projList=Projections.projectionList(); 
      projList.add(Projections.max("bizTermversion")); 
      projList.add(Projections.groupProperty("bizTermId")); 
      projList.add(Projections.groupProperty("bizTermName")); 
      projList.add(Projections.max("status")); 
      projList.add(Projections.max("levels")); 
      projList.add(Projections.max("createDate")); 
      projList.add(Projections.max("modifyDate")); 

注:我不需要最大的狀態,水平,CREATEDATE,modifyDate但如果我不與max函數的一切寫他們max函數裏面然後讓下面的錯誤

[Error Code: 0, SQL State: 42803] : column "levels" must appear in the GROUP BY clause or be used in an aggregate function 

似乎要被罰款