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