Hibernate Grails-未持久化beforeValidate()中的更改域对象

Hibernate Grails-未持久化beforeValidate()中的更改域对象,hibernate,grails,groovy,gorm,Hibernate,Grails,Groovy,Gorm,我有一个域对象,我正在更改beforeValidate()事件内部的属性值。如果此属性是对象上唯一更改的属性,则似乎没有任何内容被持久化到数据库中。我查看了调试器,发现对象已更改。但是当我调用save(flush:true)时,新值不会持久化 我可能做错了什么 但是,如果在beforeValidate()事件之外更改了另一个属性,则它确实可以工作 环境:Grails2.0.1,FailOneError全局打开 编辑 我正在对我的对象手动调用validate(),我看到调用了beforeValid

我有一个域对象,我正在更改beforeValidate()事件内部的属性值。如果此属性是对象上唯一更改的属性,则似乎没有任何内容被持久化到数据库中。我查看了调试器,发现对象已更改。但是当我调用save(flush:true)时,新值不会持久化

我可能做错了什么

但是,如果在beforeValidate()事件之外更改了另一个属性,则它确实可以工作

环境:Grails2.0.1,FailOneError全局打开

编辑 我正在对我的对象手动调用
validate()
,我看到调用了
beforeValidate()
。在调用
save(flush:true)
之前,我记录了以下内容:

log.debug("isDirty() = ${myObj.isDirty()}")
log.debug("changedVal = ${myObj.val}")
log.debug("dirtyPropertyNames = ${myObj.dirtyPropertyNames}")
打印出来的

isDirty() = false
changedVal = my new value
dirtyPropertyNames = []

因此,hibernate似乎没有意识到对象是脏的。如何使其将对象视为脏对象?

如果未刷新hibernate会话,则更改不会被持久化。尝试调用save(flush:true)强制刷新(并写入数据库)。我正在调用save(flush:true)。为了清晰起见,编辑了这个问题。好吧,我们再添加一个
save(flush:true,failOnError:true)
,也就是说,可能由于某种原因,它目前正在无声地失败?我在Config.groovyOk中找到了
grails.gorm.failOnError=true
,我想问一些明显的问题。很抱歉,无法帮助您。如果尚未刷新hibernate会话,则更改不会被持久化。尝试调用save(flush:true)强制刷新(并写入数据库)。我正在调用save(flush:true)。为了清晰起见,编辑了这个问题。好吧,我们再添加一个
save(flush:true,failOnError:true)
,也就是说,可能由于某种原因,它目前正在无声地失败?我在Config.groovyOk中找到了
grails.gorm.failOnError=true
,我想问一些明显的问题。我帮不了你,对不起。