我们有一个像这样的域类:
class Attribute {
List attributeParameters = []
static hasMany = [attributeParameters: AttributeParameter]
}
AttributeParameter
属于一个Attribute
。这里定义了其他几个关系,并且有一个实例,我们需要删除多个 Attributes 中的几个 AttributeParameters。所以我们这样做:
def parameters = AttributeParameter.findAllBySomeOtherCriteria(foo)
parameters*.delete()
这行得通,但是,attribute_parameter 中有一个列attribute_parameters_idx
不按顺序调用。此列存在是因为我们已将集合定义为列表。如果我们这样做attribute.removeFromAttributeParameters(ap)
,Grails 会自动调整此列。但是由于我们没有以这种方式删除数据,因此它们会乱序。
发生这种情况时,我们会在从 Attribute 遍历集合时返回空值。这不是缓存问题或刷新父问题。当我们这样做时会发生什么:
attribute.attributeParameters.each { }
内部的一些东西是根据 _idx 值在迭代中添加额外的行。由于缺少这些行中的一个(或多个),Grails 将在集合中添加一个空行。调试时看不到这一点,但可以在迭代发生时观察它。
最后,我的问题是:
- 有没有办法告诉 Grails 更新特定集合的 _idx 值,如果没有
- 有没有办法获得这个 _idx 列并通过 Gorm 手动修改它的值