gpt4 book ai didi

grails - Grails中的Set属性方法无法全局更改实例

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

我有一个带有临时属性DbUserSchemaServer的域类unassign

class DbUserSchemaServer {
static transients = ["unassign"]

DbUser user
String schema
DbServer server
BigInteger objects
Date creationDate
String schemaStatus //for dropping
Boolean protect

//Transients
Boolean unassign

static constraints = {
user unique:false, nullable: false, blank:false
schema unique:'server', nullable: false, blank:false
server unique: false, nullable: false, blank:false
objects blank:false, nullable:false
creationDate blank:false, nullable:false
schemaStatus nullable:true, blank: false
}

static mapping = {
protect defaultValue: false
unassign defaultValue: false
}
}

在服务中,我尝试更改 protect实例的 DbUserSchemaServer属性的值。方法如下
public Boolean protectSchema(DbUserSchemaServer usrSchSrvInst) {
println "protectSchema: "+usrSchSrvInst.schema
if(!usrSchSrvInst.protect) { // If unprotected
if(usrSchSrvInst.schemaStatus.equals("drop")) // If schema status is drop
usrSchSrvInst.setSchemaStatus(null)
usrSchSrvInst.setProtect(true)
println "-->"+usrSchSrvInst.getProtect()
return true
}
else { // If already protected
return true
}

return false
}

当我尝试通过 setProtect(true)调用更改模式TEST_SCHEMA_1的状态时,它在本地 View 中更改(在std println上打印true),但在数据库条目中未更改。我试图通过 instance.save() bu保存实例,但行为没有变化。

我现在正在使用grails 2.4.4。以前,我使用版本2.2.4,并且可以按预期工作。将应用程序迁移到版本2.4.4时遇到此问题。原因可能是什么,如何解决。

最佳答案

您在服务的什么时候检查数据库中实例的状态?您的实例何时创建?您的方法设置了保护变量,但不保存实例。

如果您调用save(),则该实例实际上并未保存到数据库中,仅在刷新 session 时才保存到数据库中。尝试使用:

save(flush: true, failOnError: false)

关于grails - Grails中的Set属性方法无法全局更改实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005537/

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