我使用 Hibernate Criteria API 编写了一个查询来获取特定值的总和,现在我需要能够将结果限制为总和大于或等于特定值的行。
通常我会在我的 SQL 中使用 HAVING 子句来执行此操作,但 Criteria API 目前似乎不支持它。
在原始 SQL 中,这是我需要它做的事情:
SELECT user_pk, sum(amount) as amountSum
FROM transaction
GROUP BY user_pk
HAVING amountSum >=50;
我想到的一种解决方法是在 FROM 子句中使用一个子查询来获取这个总和值,并使用一个外部查询来使用 WHERE 子句来限制它。
因此,在原始 SQL 中,它看起来像:
SELECT user_pk, amountSum
FROM (SELECT user_pk, sum(amount) as amountSum
FROM transaction
GROUP BY user_pk)
WHERE amountSum > 50;
谁能指出我如何使用 Criteria API 编写此代码的正确方向,或者我可以用来解决 HAVING 问题的任何其他建议/解决方法?
这是我为上述示例提供的 Criteria API 代码
DetachedCriteria criteria = DetachedCriteria.forClass(Transaction.class,"transaction");
criteria.setProjection(criteria.setProjection(Projections.projectionList().add(
Projections.groupProperty("user.userPK").as("user_pk")).add(
Projections.sum("transaction.amount").as("amountSum")));
谢谢!