gpt4 book ai didi

hibernate - 将dynamicUpdate设置为true的Grails Gorm beforeUpdate行为

转载 作者:行者123 更新时间:2023-12-02 14:10:01 24 4
gpt4 key购买 nike

我正在尝试在beforeUpdate事件内更改域对象的属性。问题在于更改后的属性无法到达数据库。有问题的域类将dymanicUpdate设置为true。我注意到,如果将dynamicUpdate更改为false,则该属性将保留到数据库中。

我使用一个域类使用GORM 6.0.11创建了一个简单的Grails 3.2.9项目。

class Example {

Integer status
Date dateCreated
Date dateClosed
Date lastUpdated

static constraints = {
status nullable: true
dateClosed nullable: true
}

static mapping = {
dynamicUpdate true
}

def beforeUpdate() {
if (isDirty('status')) {
dateClosed = new Date();
}
}
}

默认情况下,dynamicUpdate设置为false,我在beforeUpdate事件中更改的属性将持久保存到数据库中。虽然,如果将dynamicUpdate切换为true,则在beforeUpdate事件中更改的属性不再持久保存到数据库中。我在dateCreated列中得到一个空值,而不是当前日期。

知道这种行为的原因是什么,以及如何将dynamicUpdate设置为true来获得相同的结果?

最佳答案

我不确定它是否与dynamicUpdate有关,但最近发现,在GORM的before*拦截器中,您应该使用setter而不是Java bean表示法。

所以这

def beforeUpdate() {
dateClosed = new Date()
}

应该
def beforeUpdate() {
setDateClosed new Date()
}

该行为的原因是,如果您在同一类中完成更改,则所更改的属性不会标记为 dirty

关于hibernate - 将dynamicUpdate设置为true的Grails Gorm beforeUpdate行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58300872/

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