在hibernate中使用group by的意外结果

时间:2014-09-15 09:45:39

标签: java hibernate group-by

我刚刚学习如何使用hibernate来处理数据库,而且我遇到了令我感到奇怪的东西 我试图从一个由外键分组的表中获取对象列表 学生有(姓名,身份证,部门) 部门(名称,ID)......所以这是我写的代码来获取它

String x = "FROM Student s group by department";
 List<Object> obj = session.createQuery(x).list();

但我很惊讶地发现它只返回了每个部门的一名学生而不是按照我的预期分组?

我在这里做错了吗?

如何获得每个部门的学生名单?

感谢您提供的任何帮助:)

2 个答案:

答案 0 :(得分:0)

group by 子句旨在使用agregate函数。 例如:

x = "select s.age, count(s) from Student s group by department";

您将收到以下群组:{年龄,此年龄段的学生人数}

见这个例子:

hql gruping example

答案 1 :(得分:0)

根据reference documentation

  

group by子句和order by子句都不能包含   算术表达式。 Hibernate目前还没有扩展   分组实体,因此如果所有属性都不能写按猫分组   猫是非聚集的。您必须列出所有非聚合属性   明确。

您可以使用双向映射解决所需的问题。所以你有一个从学生到部门的@ManyToOne关联和一个从部门到学生的@OneToMany(mappedBy)。

然后,您将与他们的学生一起获取所有部门:

select distinct d
from Department d
join fetch d.students s

将返回一个部门列表,其中也将获取Department.students列表。