我有一个域类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 的状态时,它会在本地视图中更改(在std println
上打印为true),但不会# 39; t更改数据库条目。我试图通过instance.save()
保存实例,但行为没有变化。
我现在正在使用grails 2.4.4。以前,我使用的是2.2.4版,它按预期工作。我将应用程序迁移到版本2.4.4时遇到此问题。可能是什么原因,以及如何解决。
答案 0 :(得分:2)
您在服务的哪个阶段检查数据库中实例的状态?您的实例何时创建?您的方法设置保护变量但不保存实例。
如果您调用save()
,那么实例实际上并未保存到数据库中,它只会在刷新会话时保存到数据库中。尝试使用:
save(flush: true, failOnError: false)