我們有一個域類,像這樣:Grails的要調整_idx數據卸下
class Attribute {
List attributeParameters = []
static hasMany = [attributeParameters: AttributeParameter]
}
AttributeParameter
屬於一個Attribute
。此處定義了其他幾種關係,並且存在一個實例,我們需要刪除多個Attributes中的多個AttributeParameters。因此,我們正在這樣做:
def parameters = AttributeParameter.findAllBySomeOtherCriteria(foo)
parameters*.delete()
這樣的作品,然而,在attribute_parameter一列名爲attribute_parameters_idx
是失控序列。此列存在是因爲我們已將該集合定義爲List。如果我們做到了attribute.removeFromAttributeParameters(ap)
,Grails會自動調整此列。但由於我們沒有以這種方式去除數據,所以它們失序。
當發生這種情況時,我們在從屬性循環集合時返回空值。這不是緩存問題或刷新父問題。當我們這樣做時會發生什麼:
attribute.attributeParameters.each { }
內部東西在基於_idx值的迭代中增加額外的行。由於缺少一行(或多行),因此Grails會在集合中添加空行。在調試時你看不到這個,但你可以在迭代發生時看到它。
我的問題,最後是:
- 有沒有辦法告訴Grails的,以特定集合更新_idx值,如果不
- 有沒有辦法讓這個_idx列和修改它的值通過手動Gorm
這是一個很好的方法。我想我們最終會放棄所有列表,然後回到帶有受控sequenceNumber列的集合。但這會暫時讓我們受益。謝謝。 – Gregg