You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于HQL为非唯一列值获取单条数据?(products表场景)

HQL实现每个code仅返回一条Product记录的方案

以下是两种可行的实现方式,根据你的Hibernate版本和需求选择即可:

方法一:GROUP BY + 聚合子查询

利用id的唯一性,通过分组取每个code对应组内的最小/最大id,再关联查询完整记录:

SELECT p FROM Product p 
WHERE p.id IN (
    SELECT MIN(sub.id) FROM Product sub 
    GROUP BY sub.code
)

这里用MIN(sub.id)或者MAX(sub.id)都可以,只要能保证每个code对应唯一的一条记录就行。

方法二:窗口函数(Hibernate 5.1+支持)

使用ROW_NUMBER()窗口函数按code分区,取每个分区的第一条记录:

SELECT p FROM (
    SELECT 
        sub,
        ROW_NUMBER() OVER (PARTITION BY sub.code ORDER BY sub.id) as rn
    FROM Product sub
) p 
WHERE p.rn = 1

如果后续需要指定返回某条特定记录(比如最新更新的),只需修改ORDER BY后的字段即可,灵活性更强。

内容的提问来源于stack exchange,提问作者Taserface

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:42:37