如何基于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
相关产品推荐
相关产品推荐

