在HQL中按集合大小排序查询结果

时间:2013-09-14 07:40:10

标签: java hibernate spring-mvc hql

我正在尝试按如下方式返回HQL查询的结果:

List<Parent> parents = 
currentSession().createQuery("from Parent order by count(children)").list();

所以这个名单是由父母的孩子的笨蛋订购的,
儿童是ArrayList<Child>

我收到以下错误:

  

HTTP状态500 - 请求处理失败;
      嵌套异常是org.springframework.dao.InvalidDataAccessResourceUsageException:'order clause'中的未知列'qualified';

      SQL [不适用];嵌套异常是org.hibernate.exception.SQLGrammarException:'order clause'中未知列'qualified'

这似乎是一个非常简单的查询,而且计数方法究竟是什么,所以我真的不明白为什么它不起作用。此外,我不知道“合格”栏目的来源或含义。

2 个答案:

答案 0 :(得分:1)

我也遇到过这样的问题。当我在google搜索解决方案时,我在statckoverflow中看到你的问题,现在你可以参考我的案例了。

Class AEntity{

    @OneToMany
    Set<BEntity> bList;

}

HQL:from AEntity order by bList.size

希望能帮助像我们这样的人。谢谢。

答案 1 :(得分:0)

在这种情况下,我看到它几乎是标准的SQL,所以

"from Parent p left join p.children as pc group by p order by count(pc)"

是我需要的,但由于它现在返回带有额外列(子项数)的元组而导致错误。这是通过在select子句中指定我只想返回连接表的父部分来解决的。我不确定这里发生了什么,但这有效并且提供了一个很好的逻辑和可读查询。

"select p from Parent p left join p.children as pc group by p order by count(pc)"

simples。