我有以下作者实体。 我想打印第一组(作者按其年龄按降序排列)。
例如,
作者
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 + "]";
}
}
感谢。
答案 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();