Grails isDirty()不与协会合作

时间:2012-04-25 12:12:30

标签: grails

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

此外,getPersistentValue('patient')返回更改的值,而不是原始值。我是否正确地解决了这些方法?

谢谢, Lojza

在我的控制器类中:

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)
}

2 个答案:

答案 0 :(得分:2)

此处的正确用法应为voucherInstance.patient.isDirtyisDirty的参数化版本适用于bean字段iirc。

答案 1 :(得分: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。