2012-12-21 81 views
10

我想使用「group by」編寫條件查詢並希望返回所有列。在休眠標準查詢中選擇「所有列」和「group by」

平面SQL是這樣的:

select * from Tab group by client_name order by creation_time; 

我所知,這將有count(distinct client_name)的行數。

我這似乎並沒有給予適當的結果當前的查詢如下:

Criteria criteria = getSession(requestType).createCriteria(Tab.class); 
     criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("client_name"))); 
     criteria.addOrder(Order.asc("creationTime")); 

此查詢僅返回"client_name"。我不想手動放置所有列名稱。必須有某種方式,可以做些什麼?

+0

退房此鏈接:http://stackoverflow.com/questions/6678216/hibernate-select-all-projections-group-by – maximilianus

回答

1

我認爲你誤解了一些東西。如果您在SQL中使用GROUP BY,那麼您需要按所有選定的列進行分組。這同樣適用於休眠 - 如果groupPropertyProjection中,則表明Hibernate該列是組列。如果沒有其他列/字段被引用,Hibernate會假設你不需要它們,因爲它們也需要分組。

退一步:你想做什麼?如果表中存在全部列中的重複數據,則可能是數據不正確,或者數據保存不正確。至少,你的鑰匙會搞砸。

0

在hibernate for projection中,所有需要的列都需要添加到投影列表中。爲了在實體中獲得結果,我們必須使用setResultTransformer。檢查下面的例子,以獲得在休眠組:

ProjectionList projectionList = Projections.projectionList(); 
    projectionList.add(Projections.groupProperty("column1")); 
    projectionList.add(Projections.property("column2")); 
    projectionList.add(Projections.property("column3")); 
    criteria.setProjection(projectionList); 
    criteria.setResultTransformer(Transformers.aliasToBean(Table.class)); 
0

當使用hibernate投影時,您應該添加投影列表中所需的所有列。你只使用Projections.projectionList()。添加(Projections.groupProperty( 「CLIENT_NAME」))

這一點。所以很顯然,只返回client_name。