Richfaces+HibernateQueryを使用してデータリストを作成しています。HibernateProjectionsを使用してクエリ結果をグループ化しようとしています。コードは次のとおりです。
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