我在Criteria 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条记录时,我得到YYY条记录的附加列表。
我想排序我的结果的YYY记录的数量附加到XXX对象。
到目前为止,我更接近于偏执,而不是那个目标。有人知道吗?
要解决这个问题,您需要获取结果SQL查询(从hibernate标准生成),如下所示:
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对于这样的查询更灵活。