0

私は次のモデルを持っています:

class Post {
  int id;
  String comment;
  static belongsTo = [
    category_id:Category,
    author_id:Author
  ];
}

次のクエリを作成したいと思います。各作成者の最新の投稿を (ID で) 検索し、特定のカテゴリ X の場合にのみ投稿を返します。

これは私がこれまでに得た距離です:

def cat = Category.findByID(x); // Not yet used

def c = Post.createCriteria();
def results = c.list {
  projections {
    groupProperty("author_id", "myid")
    max("id", "version")
  }
}

def posts = results?.collect{Post.read(it[0])}

like("categorie_id", cat)の直前に追加したくなる誘惑にかられprojectionsます。

ただし、これにより、カテゴリ X に関連する各作成者の最後の投稿が取得されます。

必要: 各著者の最新の投稿 (カテゴリ X に属している場合)。

つまり、各著者の最新の投稿がカテゴリ x かどうかを知りたいのです。

これを行うには、最初の結果に対して2回目の検索を実行する必要があると思いますが、これを行う方法がわかりません。

助言がありますか?

ありがとうございました、

チョポ

4

1 に答える 1

0

idGORM が追加するものと異なる場合を除き、フィールドを定義するべきではありません。デフォルトで Long id が追加されるため、独自のフィールドは必要ありません。また、あなたのbelongsTo名前は非常に標準的ではあり_idません - 接尾辞を削除する必要があります. そして、それらすべてのセミコロンとの取引は何ですか ;)

このドメイン クラスを考えると:

class Post {
   String comment
   static belongsTo = [
      category: Category,
      author: Author
   ]
}

次に、この HQL クエリを使用して、指定したカテゴリの各作成者の最新の投稿を取得できます (基準クエリでそれを行う方法がわかりません)。

def category = ...

def posts = Post.executeQuery(
   'select p from Post p where id in (' +
      'select max(p.id) from Post p ' +
      'where p.category=:category group by p.author.id)',
   [category: category])
于 2013-03-10T19:41:47.287 に答える