2

私は次のテーブル/モデルを持っています:

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

あたりの最後Post(最高)を除外できるクエリを作成したいと思います。結果を形にしたい。idCategoryList<Post>

言い換えると(私は信じています)SQLではクエリは次のようになります:

SELECT *
FROM
  Post AS source
  JOIN (
    SELECT MAX(id) AS id, category_id 
    FROM Post
    GROUP BY category_id
  ) AS filter
  ON source.id = filter.id;

私が正しく理解している場合、最初のステップはHibernateCriteriaBuilder:を使用することです。

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

だから私の質問は2つの部分です:

  1. 私は正しい方向に進んでいますか?

  2. List<Post>結果オブジェクトを使用して配列を取得するにはどうすればよいですか?

    (のようなものdef latest = Post.FindAllByXXX(result);:)

4

1 に答える 1

6

はい、あなたは正しい軌道に乗っています。また、Postのidプロパティをプロジェクションに追加します。

projections {
    property('id')
}

次に、 idを使用してすべての投稿を収集し、次のような投稿のリストを取得します。

def latestPosts = results?.collect{Post.read(it[0])}
于 2013-02-24T10:36:46.583 に答える