在我的应用程序中,我正在更新一个与患者实体具有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)
}
答案 0 :(得分:2)
此处的正确用法应为voucherInstance.patient.isDirty
。 isDirty
的参数化版本适用于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。