0

在我的应用程序中,我正在更新与患者实体 1:1 关联的对象凭证。在我的控制器中,我调用“voucherInstance.properties = params”来绑定新值。但是当我在凭证中更改患者(尚未保存),然后我调用 isDirty('patient'),在这种情况下 IMO 应该返回 true,它实际上返回 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

我做了一些谷歌搜索,找到了一个解决方案,虽然不是一个好的解决方案: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 回答