能否在返回自定义实体的JPA查询中添加HAVING子句?
可以在JPA查询中添加HAVING子句,即使返回自定义对象
完全没问题!不管你的JPA查询返回的是实体类还是像SomeEntitySummary这样的自定义DTO对象,JPQL都支持使用HAVING子句来过滤分组后的结果,和你写的原生SQL逻辑完全对应。
你只需要在JPQL的group by语句之后直接追加HAVING子句即可,语法和原生SQL几乎一致。针对你的查询,修改后的写法如下:
@Query(value = "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")
关键点说明:
HAVING子句在JPQL中的作用和原生SQL完全相同:用于对GROUP BY分组后的结果集进行过滤,它可以使用分组聚合函数(比如这里的count(ret.id))作为判断条件。- 不管你是返回实体还是自定义构造的DTO,只要查询中包含
GROUP BY,就可以正常使用HAVING来筛选分组结果。 - 你给出的原生SQL逻辑是有效的,对应的JPQL写法也完全合法,不需要额外的特殊配置。
如果之前没找到示例,可能是因为很多示例都是针对实体返回的场景,但实际上DTO返回的场景用法完全一致~
内容的提问来源于stack exchange,提问作者aniri
相关产品推荐
相关产品推荐

