次のような Domain クラスがあります。
class Attribute {
List attributeParameters = []
static hasMany = [attributeParameters: AttributeParameter]
}
AttributeParameter
に属しAttribute
ます。ここには他にもいくつかの関係が定義されており、多くの属性にわたっていくつかの AttributeParameters を削除する必要があるインスタンスがあります。だから私たちはこれをやっています:
def parameters = AttributeParameter.findAllBySomeOtherCriteria(foo)
parameters*.delete()
それはうまくいきますが、attribute_parameter にattribute_parameters_idx
は順序が狂う列があります。コレクションを List として定義したため、この列が存在します。そしてattribute.removeFromAttributeParameters(ap)
、そうすると、Grails はこの列を自動的に調整します。しかし、そのようにデータを削除していないため、データは順不同になります。
これが発生すると、Attribute からコレクションをループすると null 値が返されます。これはキャッシュの問題でも、親の問題の更新でもありません。何が起こるかは、次の場合です。
attribute.attributeParameters.each { }
_idx 値に基づいて、内部で何かが繰り返しに追加の行を追加しています。これらの行の 1 つ (または複数) が欠落しているため、Grails は Collection に null 行を追加しています。デバッグ中はこれを確認できませんが、反復が発生するにつれて確認できます。
最後に、私の質問は次のとおりです。
- 特定のコレクションの _idx 値を更新するように Grails に指示する方法はありますか?
- この _idx 列を取得し、Gorm を介してその値を手動で変更する方法はありますか