小编use*_*701的帖子

Hibernate Criteria API - HAVING子句可以解决

我使用Hibernate Criteria API编写了一个查询来获取特定值的总和,现在我需要能够将结果限制为该总和大于或等于特定值的行.

通常我会在我的SQL中使用HAVING子句来执行此操作,但此时Criteria API似乎不支持这一点.

在原始SQL中,这就是我需要它做的事情:

SELECT user_pk, sum(amount) as amountSum
FROM transaction
GROUP BY user_pk
HAVING amountSum >=50;
Run Code Online (Sandbox Code Playgroud)

我想到的一种解决方法是在FROM子句中使用子查询来获取此求和值,并使用外部查询来使用WHERE子句来限制它.

因此,在原始SQL中它看起来像:

SELECT user_pk, amountSum
FROM (SELECT user_pk, sum(amount) as amountSum
      FROM transaction
      GROUP BY user_pk)
WHERE amountSum > 50;
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我如何使用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")));
Run Code Online (Sandbox Code Playgroud)

谢谢!

hibernate criteria having

10
推荐指数
1
解决办法
2万
查看次数

HQL - 分页的行标识符

有谁知道HQL是否有关键字来识别ROWID或ROWNUM等行?

我想用HQL实现分页,但是我无法使用.setMaxResult()或.setFirstResult(),因为我不直接使用会话对象,因此不使用Query对象而只是创建我的查询一个字符串并使用.find()方法.

我在我的查询中尝试使用LIMIT和OFFSET,但是HQL似乎忽略了这些关键字并且无论如何都将整个结果返回给我.

我也无法使用Hibernate标准,因为它不支持我的查询中出现的"HAVING"子句.

我的最后一种方法是使用ROWNUM/ROWID关键字限制结果集.还有其他人有其他建议吗?

java pagination hibernate hql

8
推荐指数
2
解决办法
2万
查看次数

标签 统计

hibernate ×2

criteria ×1

having ×1

hql ×1

java ×1

pagination ×1