4

我有一个与“Y”有一对多关联的实体“X”

每个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 表达这一点?

非常感谢彼得

4

1 回答 1

6

您需要alias为 Y 集合创建一个,获取其计数并按其排序。这是一个例子:

// 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"));
于 2013-11-08T16:27:14.523 回答