gpt4 book ai didi

grails - 如何检测 afterUpdate|beforeUpdate GORM 方法中哪个字段已更新

转载 作者:行者123 更新时间:2023-12-02 13:46:01 26 4
gpt4 key购买 nike

我在 grails 项目中使用了 GORM API 反射(reflect)的 afterUpdate 方法。

class Transaction{

Person receiver;
Person sender;


}

我想知道哪个字段被修改为 afterUpdate相应的行为:
class Transaction{
//...............
def afterUpdate(){
if(/*Receiver is changed*/){
new TransactionHistory(proKey:'receiver',propName:this.receiver).save();
}
else
{
new TransactionHistory(proKey:'sender',propName:this.sender).save();
}

}
}

我可以用 beforeUpdate : 并在全局变量(以前为事务)中更新更新前的对象,然后在更新后,比较 previous与当前对象。
可能?

最佳答案

通常这可以通过使用 isDirty 来完成。域实例上的方法。例如:

// returns true if the instance value of firstName 
// does not match the persisted value int he database.
person.isDirty('firstName')

但是,在您的情况下,如果您使用 afterUpdate()该值已被持久化到数据库和 isDirty永远不会返回真。

您必须使用 beforeUpdate 实现自己的检查。 .这可能是设置您稍后阅读的 transient 值。例如:
class Person {
String firstName
boolean firstNameChanged = false
static transients = ['firstNameChanged']
..
def beforeUpdate() {
firstNameChanged = this.isDirty('firstName')
}
..
def afterUpdate() {
if (firstNameChanged)
...
}
...
}

关于grails - 如何检测 afterUpdate|beforeUpdate GORM 方法中哪个字段已更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25870542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com