2

我在尝试计算项目时遇到了一些问题。

想象以下领域类

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 列表...... :-(

4

2 回答 2

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];

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

于 2012-06-08T23:13:42.163 回答
0

有东西!

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

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

这是我的查询:

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

这个查询效率不高,因为它在一个循环中获取所有作者,但现在没关系。

于 2012-06-09T14:13:17.493 回答