2014-03-13 84 views
1

我有查询的标准API,这是这样的:JSF休眠标准API

CriteriaQuery<XXX> query = builder.get().createQuery(XXX.class).distinct(true); 
Root<XXX> root = query.from(XXX.class); 
Fetch<XXX, YYY> fetch = root.fetch(XXX_.yyy, JoinType.LEFT); 

现在我卡上的一部分:
当我得到的查询结果,我的XXX记录名单,附有YYY记录的列表,当它们存在时。
我想将我的结果按NUMBER OF YYY记录分类到XXX对象进行排序。

到目前为止,我更接近偏执狂,然后到那个目标。任何人?

回答

1

为了解决你所需要的结果SQL查询(从休眠标准生成),看起来像这样得到的问题:

SELECT xxx.*,count(yyy.FOREIGN_KEY_FIELD) as count FROM XXX xxx left join YYY yyy on (yyy.FOREIGN_KEY_FIELD=xxx.PRIMARY_KEY_FIELD) group by xxx.PRIMARY_KEY_FIELD order by count

可能是这种情况下,你需要使用Hibernate查询API 。标准是为实体创建的,并只返回实体列表和一些预测。在HQL它的外观非常相似:

select xxx,count(yyy.FOREIGN_KEY_FIELD) as count from XXX xxx left join xxx.yyy yyy group by xxx.PRIMARY_KEY_FIELD order by count

HQL是这样的查询更加灵活。