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 ドメイン クラスに属している場合があります。

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 に答える