在我的 Grails 应用程序中,我有两个具有一对多关系的域类,例如
class Parent
static hasMany = [children: Child]
}
class Child {
Integer index
static belongsTo = [parent: Parent]
}
我想index
记录创建孩子的相对顺序,这样父母的第一个孩子的索引为 1,下一个孩子的索引为 2,依此类推。索引不必是连续的,因为孩子可以被删除,但它们应该始终反映创建的相对顺序。
我考虑做类似下面的事情来设置index
属性
class Child {
Integer index
static belongsTo = [parent: Parent]
def beforeValidate() {
def maxIndex = Child.createCriteria().get {
projections {
max('index')
}
eq('parent', parent)
}
this.index = maxIndex + 1 ?: 1
}
}
但当然这不起作用,因为它会将相同的索引分配给两个瞬态Child
实例。维护此index
属性的最简单方法是什么?
FWIW,我不太担心阻止任何其他代码设置index
,但如果有某种方法可以做到这一点,那将是一个奖励。