我正在使用Richfaces + HibernateQuery來創建數據列表。我正在嘗試使用Hibernate Projections對我的查詢結果進行分組。下面是代碼:使用休眠投影的問題
final DetachedCriteria criteria = DetachedCriteria
.forClass(Class.class, "c")
.setProjection(Projections.projectionList()
.add(Projections.groupProperty("c.id")));
...
在.xhtml文件我有以下代碼:
<rich:dataTable width="100%" id="dataTable" value="#{myBean.dataModel}" var="row">
<f:facet name="header">
<rich:columnGroup>
......
</rich:columnGroup>
</f:facet>
<h:column>
<h:outputText value="#{row.id}"/>
</h:column>
<h:column>
<h:outputText value="#{row.name}"/>
</h:column>
但是當我運行的網頁它給了我下面的錯誤:
Error: value="#{row.id}": The class 'java.lang.Long' does not have the property 'id'.
如果我從代碼中取出投影,它可以正常工作,但它不會對結果進行分組。那麼,這裏可能會發生哪些錯誤?
編輯:以下是完整的標準:
final DetachedCriteria criteria = DetachedCriteria.forClass(Event.class, "e");
...
joins....
...
criteria.setProjection(Projections.distinct(Projections.projectionList()
.add(Projections.groupProperty("e.id").as("e.id"))));
getDao().findByCriteria(criteria);
,如果我把它工作正常的 「setProjection」 行。我不明白爲什麼會出現這樣的錯誤。
這裏是我想要做的查詢:
select e.event_id from event e
inner join event_product_group epg
on e.event_id = epg.event_id
inner join product_group pg
on pg.product_group_id = epg.product_group_id
where pg.description like '%TEXT%'
group by e.event_id
是否有更符合你的標準?從這個錯誤看來,你正在取回一個Long值而不是一個映射實體。你在預測什麼?看起來你只有一羣人。你似乎沒有與你的羣組彙總。 – 2010-03-30 21:07:57
我把上面的標準。它有更多的線條,但它們在這裏並不重要,它們只是另一個限制。我不知道是否有更好的方法來使用hibernate標準對數據進行分組。 – Lucas 2010-03-30 21:22:26
好吧,對不起,但是你介意把SQL用於你想要做的事情嗎?我不明白你的標準例子。您是否在.forClass中爲您的實體類參數放入Class.class?與預測一樣,你通常會預測一些東西(選擇語句部分),並且你只有一個沒有聚合函數的小組(通常伴隨着一個小組)。 – 2010-03-30 21:28:49