Grails:使用Criteria + projection的结果作为原始表的过滤器

Cho*_*o87 2 grails createcriteria hibernate-criteria

我有以下表/型号:

class Post {
  int id;
  String comment;
  static belongsTo = [category_id:Category];
}
Run Code Online (Sandbox Code Playgroud)

我希望创建一个可以过滤掉最后一个Post(最高id)的查询Category.我希望结果List<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;
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,第一步是使用HibernateCriteriaBuilder:

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

所以我的问题分为两部分:

  1. 我是在正确的轨道上吗?
  2. 如何使用结果对象获取List<Post>数组?

    (喜欢的东西:def latest = Post.FindAllByXXX(result);)

uch*_*amp 6

是的,你走在正确的轨道上.我还要将Post 的id属性添加到我的预测中:

projections {
    property('id')
}
Run Code Online (Sandbox Code Playgroud)

然后使用id收集所有帖子以获取帖子列表,例如:

def latestPosts = results?.collect{Post.read(it[0])}
Run Code Online (Sandbox Code Playgroud)