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

Hibernate中如何获取排序结果里的第一组数据?

解决方案:获取年龄最小的所有作者

要拿到按年龄升序后的第一组(也就是所有年龄最小的作者),你原来的查询只是做了排序但没有过滤逻辑,所以会返回全部数据。这里有几种实用的修改方式:

方法1:分步查询(直观易理解)

先查询出数据库中作者的最小年龄值,再用这个值作为条件筛选所有匹配的作者:

// 第一步:获取最小年龄
Integer minAge = (Integer) session.createQuery("SELECT MIN(A.age) FROM Author A").uniqueResult();

// 第二步:查询所有年龄等于最小年龄的作者,按id排序和示例结果一致
String hql = "FROM Author A WHERE A.age = :minAge ORDER BY A.id ASC";
Query query = session.createQuery(hql);
query.setParameter("minAge", minAge);
List<Author> results = query.list();

方法2:子查询一步完成

把获取最小年龄的逻辑嵌套到主查询里,一次执行就能得到目标结果:

String hql = "FROM Author A WHERE A.age = (SELECT MIN(age) FROM Author) ORDER BY A.id ASC";
Query query = session.createQuery(hql);
List<Author> results = query.list();

方法3:窗口函数(适合高版本Hibernate)

如果你的Hibernate版本在5.2及以上(支持SQL窗口函数),可以用RANK()函数直接分组并筛选第一组数据:

String hql = """
    SELECT a FROM (
        SELECT A, RANK() OVER(ORDER BY A.age ASC) as ageRank
        FROM Author A
    ) subQuery
    WHERE subQuery.ageRank = 1
    ORDER BY subQuery.A.id ASC
""";
Query query = session.createQuery(hql);
List<Author> results = query.list();

以上三种方法都能返回你需要的结果:所有年龄为20的作者,按id升序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:20:56