标准搜索

时间:2012-06-08 20:34:25

标签: grails gorm hibernate-criteria

我在尝试计算物品时遇到了一些问题。

想象一下以下域类

class Book {
  String name
}
class Author {
  String name
  static hasMany = [books:Book]
}

如何获取按书籍数量排序的作者列表?

这是我的尝试:

def c = Author.createCriteris()
c.list {
  projections {
    count 'books', 'numBooks'
    groupProperty 'id'
  }
  order 'numBooks', 'desc'
}

但不知怎的,我只获得了无法使用的结果......而且我不知道如何将Author对象加入到rsult列表....: - (

2 个答案:

答案 0 :(得分:2)

没有尝试过,但你不能做类似的事情:

class Author {

    String name
    static hasMany = [books:Book]

    static namedQueries = {
        sortByMostBooks {
            books {
                order('size', 'desc')
            }
        }
    }
}

然后通过清理器命名查询

进行访问
Author.sortByMostBooks.list();

此外,您可能希望在Book域类中包含belongsTo:

static belongsTo = Author;

或:

static belongsTo = [authors:Author];

如果一本书可能有多位作者

答案 1 :(得分:0)

得到了一些东西!

我仍然不知道如何用标准来做,但是通过切换到HQL,我成功了。

因此,如果有人提出标准解决方案,他仍会获得正确答案的奖金: - )

这是我的查询:

Author.executeQuery("""
    select 
        a, size(a.books) as numBooks 
    from 
        Author a 
    group by 
        id 
    order by 
        numBooks DESC
""",[max:20])

此查询效率不高,因为它在循环中获取所有作者,但现在还可以。