如何在hibernate中获取排序结果中的第一组结果?

时间:2018-05-17 11:13:21

标签: java hibernate hql

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

例如,

作者

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

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

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 + "]";
}

}

感谢。

4 个答案:

答案 0 :(得分:1)

我认为你想要年龄最小的人。 尝试使用简单的子查询

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

答案 1 :(得分:1)

如果我理解你的正确性比一个群体是一个升序年龄之间的范围。

例如,第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-Statement

中的命名参数完成分组
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?

答案 2 :(得分:1)

尝试此代码后,可能会有所帮助

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

答案 3 :(得分:0)

使用group by,

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