我有以下域类:
class ParentClass {
String myProperty
static hasMany = [ childClasses : ChildClass]
}
class ChildClass {
Date birthday
static belongsTo = [ parentClass : ParentClass]
}
我需要能够列出最近孩子的出生日期所订购的ParentClasses。如果我能够使用常规CRUD列表页面中使用的params
,那将是最好的。
我知道我可以在控制器中为这个特定的顺序编写一个特定的规则,但我觉得这不是最好的解决方案,我应该根据派生属性或基于标准的瞬态属性使用某些东西,但找不到办法(我对Grails和Hibernate不熟悉)。
任何指针都会受到赞赏。
修改:我设法做到了:
static mapping = {
mostRecentBirthday formula: '(
SELECT c.data
FROM ChildClass c
WHERE c.parent_class_id=id
ORDER BY c.birthday DESC LIMIT 1
)'
}
我对此解决方案的唯一问题是parent_class_id
在那里是硬编码的。有没有更正确的方法来写这个?
答案 0 :(得分:0)
如果我理解正确,那么你可以这样做:
def parentClass = new ParentClass(params.id);
// let this be your parentclass
// you want to have the childs from ordered by birthday
def childListOrderedByBirthday = ChildClass.withCriteria {
parentClass {
eq("id", parentClass.id);
}
order("birthday", "desc")
}.list()
答案 1 :(得分:0)
crudolf方法的替代方法是使用dynamic finder。它看起来像这样:
def parentClass = new ParentClass(params.id);
def childListOrderedByBirthday =
ChildClass.findAllByParentClass(parentClass,
[sort: "birthday", order: "desc"]);
这可能更清晰。