Grails:使用标准的结果+;投影作为原始表上的过滤器

Grails:使用标准的结果+;投影作为原始表上的过滤器,grails,hibernate-criteria,createcriteria,Grails,Hibernate Criteria,Createcriteria,我有以下表格/型号: class Post { int id; String comment; static belongsTo = [category_id:Category]; } 我希望创建一个查询,可以根据类别筛选出最后一个帖子(最高的id)。我想要列表中的结果 换句话说(我相信)在SQL中,查询将如下所示: SELECT * FROM Post AS source JOIN ( SELECT MAX(id) AS id, category_id

我有以下表格/型号:

class Post {
  int id;
  String comment;
  static belongsTo = [category_id:Category];
}
我希望创建一个查询,可以根据
类别
筛选出最后一个
帖子
(最高的
id
)。我想要
列表中的结果

换句话说(我相信)在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")
    }
  }
所以我的问题分为两部分:

  • 我走对了吗

  • 如何使用results对象获取
    列表
    数组

    (类似于:
    def latest=Post.FindAllByXXX(结果);


  • 是的,你在正确的轨道上。我还会将帖子的id属性添加到我的投影中:

    projections {
        property('id')
    }
    
    然后使用id收集所有帖子,以获得帖子列表,如:

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