如何在休眠中获得排序结果中的第一组结果?

How to get first group of results in sorted results in hibernate?

我有以下作者实体。 我想打印第一组(按年龄降序排列的作者)。

例如,

作者

id name age

1   JK   20

2  NRN  25

3  APJ  35

4  RK  20

5  NRN  25

6 JK  20

7  RK  20

排序后 (ASC) 将是:

1  JK  20

4  RK  20

6 JK  20

7  RK  20

2  NRN  25

3  APJ  35

5  NRN  25

我想得到第一组分组结果,即

1  JK  20

4  RK  20

6 JK  20

7  RK  20

我尝试了以下查询,但它 returns 所有结果。

String hql = "FROM Author A ORDER BY A.age ASC";
Query query = session.createQuery(hql);
List results = query.list();

请告诉我查询中可以修改的内容。

@Entity
public class Author {

@Id
private int id;

private String name;

private int age;

public Author() {
}

public Author(int id, String name, int age) {
    super();
    this.setId(id);
    this.setName(name);
    this.setAge(age);
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

@Override
public String toString() {
    return "Author [id=" + id + ", name=" + name + ", age=" + age + "]";
}

}

谢谢。

使用分组依据,

String hql = "FROM Author A  GROUP BY A.age ORDER BY A.age ASC ";
Query query = session.createQuery(hql);
List results = query.list();

我假设您想要年龄最小的人。 用一个简单的子查询试试

SELECT a FROM Author a WHERE a.age = (SELECT min(a.age) FROM Author a)

如果我理解你是对的,那么一个群体是一个介于上升年龄之间的范围。

例如第 1 组年龄 20 - 30 第 2 组 30 - 40 岁 a.s.o

此时可以通过以下方式查询属于一个组的作者数量

   String hql = "SELECT count(A.id) FROM Author A WHERE
                "A.age >= 20 AND A.age < 30 ORDER BY A.age ASC";

结果将是第 1 组中的作者数量。 要查询属于第一组的完整作者集,您可以使用此语句。

String hql = "FROM Author A WHERE
                "A.age >= 20 AND A.age < 30 ORDER BY A.age ASC";

现在您知道有多少作者属于第一组并且可以使用您的查询 使用 setFirstResult 和 setMaxResult。

也可以使用 HQL 语句中的命名参数进行分组

int minAge = 20;
int maxAge = 30;

String hql = "SELECT count(A.id) FROM Author A WHERE
                "A.age >= :minAge AND A.age < :maxAge ORDER BY A.age ASC";

您必须将命名参数的值分配给查询实例。 看看这里:http://www.java2s.com/Code/Java/Hibernate/HQLwithNamedParameters.htm

现在您可以循环查询。 对于设置结果集的范围,请参考 How do you do a limit query in HQL?

一旦尝试此代码,它可能会有所帮助

 List<Author> ages = session
                .createNativeQuery("SELECT * FROM Author a WHERE a.age = (SELECT min(a.age) FROM Author a)")
                .addEntity(Author.class).getResultList();