我有一个实体“X”与“Y”的一对多关联
每个X都有一个唯一的xid,每个Y都有一个xid和一个唯一的yid
我想写一个标准来生成一个按照相关Y的数量排序的X列表
这是等效的SQL
SELECT *
FROM X JOIN Y ON X.xid = Y.xid
GROUP BY X.xid
ORDER BY COUNT(Y.yid) DESC
如何使用Hibernate Criteria表达这一点?
非常感谢 彼得
答案 0 :(得分:5)
您希望为Y集合创建alias
,获取其数量并按其排序。这是一个例子:
// Create the criteria assuming session is open
Criteria criteria = session.createCriteria(X.class, "x");
// Give the Y association an alias
criteria.createAlias("x.yCollectionName", "yCollectionAlias");
// Get the count of IDs in the joined collection
criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("yCollectionAlias.id"))
.add(Projections.count("yCollectionAlias.id").as("yCollectionAliasCount")));
// Sort the criteria associated by Ys
criteria.addOrder(Order.desc("yCollectionAliasCount"));