在我的應用程序中,我正在更新與患者實體具有1:1關聯的對象憑證。在我的控制器中,我調用「voucherInstance.properties = params」來綁定新值。但是,當我更改憑證中的患者(尚未保存)時,然後我調用isDirty('patient'),在這種情況下IMO應該返回true,但實際上它返回false。Grails isDirty()不與協會合作
此外,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)
}
你確定你的(改變的)實例在調用'isDirty'之前沒有被保存? [getPersistentValue()](http://grails.org/doc/latest/ref/Domain%20Classes/getPersistentValue.html)應該爲您提供持久/未更改的值。如果持久化和改變的值相等,'isDirty'必須是'false'。你有一些代碼給我們嗎? – aiolos 2012-04-25 13:12:39