Grails isDirty()不使用关联

Grails isDirty()不使用关联,grails,Grails,在我的应用程序中,我正在更新与患者实体具有1:1关联的对象凭证。在我的控制器中,我调用“voucherInstance.properties=params”来绑定新值。但当我在凭证中更改患者时(尚未保存),然后我调用isDirty(“患者”),在本例中IMO应返回true,它实际上返回false 另外,getPersistentValue('patient')返回更改的值,而不是原始值。我正确理解这些方法吗 谢谢, 洛伊扎 在我的控制器类中: def update() { Voucher

在我的应用程序中,我正在更新与患者实体具有1:1关联的对象凭证。在我的控制器中,我调用“voucherInstance.properties=params”来绑定新值。但当我在凭证中更改患者时(尚未保存),然后我调用isDirty(“患者”),在本例中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)
}

这里的正确用法应该是
voucherInstance.patient.isDirty
isDirty
的参数化版本是为bean字段iirc设计的。

我在谷歌上搜索了更多的内容,找到了一个解决方案,尽管不是很好:


这似乎奏效了。但是我必须显式地将所有关联设置为null,然后才能更新它们。

在调用
isDirty
之前,您确定没有保存(更改的)实例吗?应该为您提供持久/未更改的值。如果保留值和更改值相等,
isDirty
必须为
false
。您有一些代码给我们吗?这将返回与方法相同的结果。您是在更改患者还是在创建新的患者?如果它是新的,它就不会脏,因为它还没有进入数据库。如果你正在更新,那么我不确定。不,我正在更新。你可以在我的第一篇文章中看到,我在其中添加了一些代码。
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)
}