Grails 中的 Set 属性 方法无法全局更改实例
Set property method in grails could not change the instance globally
我有一个域 class 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
}
}
在一项服务中,我试图更改 DbUserSchemaServer
实例的 protect
属性 的值。方法如下
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 的状态时,它在本地视图中发生变化(在 std [ 上打印 true =18=]), 但在数据库条目中没有改变。我试图通过 instance.save()
保存实例,但行为没有改变。
我现在使用的是 grails 2.4.4。以前,我使用的是 2.2.4 版本,它按预期工作。我将应用程序迁移到 2.4.4 版时遇到了这个问题。可能是什么原因,如何解决。
您在服务中的什么时候检查数据库中实例的状态?你的实例是什么时候创建的?您的方法设置了保护变量但不保存实例。
如果您调用 save()
,则该实例实际上并未保存到数据库中,它仅在刷新会话时才保存到数据库中。尝试使用:
save(flush: true, failOnError: false)
我有一个域 class 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
}
}
在一项服务中,我试图更改 DbUserSchemaServer
实例的 protect
属性 的值。方法如下
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 的状态时,它在本地视图中发生变化(在 std [ 上打印 true =18=]), 但在数据库条目中没有改变。我试图通过 instance.save()
保存实例,但行为没有改变。
我现在使用的是 grails 2.4.4。以前,我使用的是 2.2.4 版本,它按预期工作。我将应用程序迁移到 2.4.4 版时遇到了这个问题。可能是什么原因,如何解决。
您在服务中的什么时候检查数据库中实例的状态?你的实例是什么时候创建的?您的方法设置了保护变量但不保存实例。
如果您调用 save()
,则该实例实际上并未保存到数据库中,它仅在刷新会话时才保存到数据库中。尝试使用:
save(flush: true, failOnError: false)