【问题标题】:Hibernate criteria order by one-to-many association count休眠条件按一对多关联计数排序
【发布时间】:2013-11-20 17:30:56
【问题描述】:

我有一个实体“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 表达这一点?

非常感谢 彼得

【问题讨论】:

  • 你的意思是 JPA CriteriaQuery 吗?

标签: java sql hibernate hibernate-criteria


【解决方案1】:

您需要为 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"));

【讨论】:

  • 其实这不适合我。当我尝试上面的代码时,我没有得到 X 实体的列表,而是得到一个包含元素 yCollectionAlias.id 和 yCollectionAliasCount 的对象数组列表。我只想要一个按 yCollectionAliasCount 排序的 X 列表。我该怎么做?
  • 您介意发布更多代码,以便我了解您在做什么吗?
  • 如果这不能回答您的问题,您能否取消选中它作为选定的答案?在阅读您说它不起作用的评论之前,我开始尝试实现这一点。
  • 我为这个问题找到的最佳解决方案是使用自定义 Order 类:stackoverflow.com/questions/1254306/…stackoverflow.com/questions/31855253/…
猜你喜欢
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多