如何解决Grails 如何使用标准按儿童最大日期对列表进行排序
我正在使用 grails(版本 3.1.5)并尝试按儿童班级的最大日期对列表进行排序
域:
class Entity {
static hasMany = [childrens: Children]
}
class Children {
Date date
}
SELECT
*
FROM
entity
INNER JOIN
children c1 ON c1.entity_id = entity.id
WHERE
c1.date =
(SELECT MAX(c2.date) FROM children c2 WHERE c2.entity_id = c1.entity_id)
ORDER BY
c1.date DESC
有谁知道如何使用标准来做到这一点?
编辑:
我能够使用下面的代码执行正确的查询,但我无法在实体列表中转换结果(因为投影):
Entity.createCriteria().list(params) {
childrens {
projections {
groupProperty 'entity'
max 'date','maxDate'
}
}
order 'maxDate','desc'
}
解决方法
解决此类问题的最简单方法是添加一些冗余:
class Entity {
Date maxChildrenDate
def beforeInsert() {
maxChildrenDate = childrens.*date.max()
}
def beforeUpdate() {
beforeInsert()
}
static hasMany = [childrens: Children]
}
然后查询很简单:
def list = Entity.list( sort:'maxChildrenDate',order:'asc' )
要设置/更新 maxChildrenDate
,您可能需要使用上面显示的拦截器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。