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])}