是否可以在返回自定义实体的JPA查询中添加hading子句?

问题描述 投票:1回答:1

我有以下jpa查询(我从中删除了不相关的信息):

@Query(value = "SELECT new SomeEntitySummary(et.id, count(ret.id)) " +
        "FROM SomeEntity et left join SomeRelatedEntity ret on ( ... ) " +
        "WHERE ... " +
        "group by et.id"
    )

它返回一个自定义对象,而不是实体。

是否可以在其中包含一个having子句?

SQL等效项可以工作,并且看起来像:

select et.id,count(ret.id)
from someentity et
left join somerelatedentity ld on (...)
group by et.id
**having count(ret.id) between 1 and 100**

是否可以在jpa查询中编写此代码?我还没有找到任何相关的例子:(

sql hibernate jpa jpql
1个回答
1
投票

是的,有可能。根据休眠文档(请参阅15.51. Group by部分)。

在分组查询中,where子句适用于非聚合值(本质上,它确定行是否将其纳入聚合)。 HAVING子句还限制结果,但它对汇总值起作用。

HAVING子句遵循与WHERE子句相同的规则,并且也由谓词组成。 HAVING在完成分组和聚合之后应用,而WHERE子句在之前应用。

因此,您可以通过以下方式将having子句添加到第一个查询中:

SELECT new SomeEntitySummary(et.id, count(ret.id))
FROM SomeEntity et left join SomeRelatedEntity ret on ( ... )
WHERE ... 
group by et.id
having count(ret.id) between 1 and 100
© www.soinside.com 2019 - 2024. All rights reserved.