0

私のアプリでは、Patient エンティティに 1:1 で関連付けられているオブジェクト Voucher を更新しています。私のコントローラーでは、「voucherInstance.properties = params」を呼び出して新しい値をバインドします。しかし、バウチャーの患者を変更して (まだ保存していない)、IMO が true を返すはずの isDirty('patient') を呼び出すと、実際には false が返されます。

また、getPersistentValue('patient') は、元の値ではなく、変更された値を返します。これらの方法を正しく理解していますか?

ありがとう、ロイザ

私のコントローラークラスでは:

def update() {
   Voucher voucherInstance = voucherService.get(id)
   voucherInstance.properties = params // patient is being sent from view by params.patient.id
   voucherService.update(voucherInstance)
}

私の VoucherService クラスでは:

public Voucher update(Voucher voucher) {
   if (voucher.isDirty('patient')) {  // returns false
      // do something
      Patient oldPatient = voucher.getPersistentValue('patient') // returns the updated patient
   }
   voucher.save(flush: true)
}
4

2 に答える 2

2

ここでの正しい使い方はvoucherInstance.patient.isDirty. のパラメーター化されたバージョンはisDirty、Bean フィールド iirc 用です。

于 2012-04-25T12:31:10.827 に答える
0

私はもう少しグーグルをして、1つの解決策を見つけましたが、良いものではありません: http://stuff4j.blogspot.com/2011/05/i-encountered-few-times-strange.html

def update() {
   Voucher voucherInstance = voucherService.get(id)
   voucherInstance.patient = null
   voucherInstance.properties = params // patient is being sent from view by params.patient.id
   voucherService.update(voucherInstance)
}

これはうまくいくようです。しかし、更新する前に、すべての関連付けを明示的に null に設定する必要があります。

于 2012-04-28T09:38:57.983 に答える