我正在尝试在我的用户域类中使用 beforeInsert。
class User {
String reEnterPassword
static constraints = {
password(blank: false, nullable: false, size:5..50, validator: {password, obj ->
def reEnterPassword = obj.properties['reEnterPassword']
if(reEnterPassword == null) return true
reEnterPassword == password ? true : ['invalid.matchingpasswords']
})
reEnterPassword(bindable:true, blank: false);
}
def beforeInsert = {
password = password.encodeAsSHA()
}
String toString(){
name
}
static transients = ['reEnterPassword']
}
在我的控制器中,我有保存方法(生成)
def save() {
def userInstance = new User(params)
if (!`userInstance.save(flush: true)`) {
render(view: "create", model: [userInstance: userInstance])
return
}
这是抛出异常Grails运行时异常,org.hibernate.AssertionFailure: null id in entry(异常发生后不要刷新Session),当域对象save方法遇到SQL异常时
我在文档中阅读了自动时间戳记,即不要尝试在事件中刷新会话(例如使用 obj.save(flush:true))。由于在刷新期间触发了事件,这将导致 StackOverflowError。
在这种情况下如何保存我的userInstance.save(flush: true)
我试图删除flush:true
但我仍然得到同样的错误。如果我删除flus:true..那么当我需要打电话时。当休眠将刷新所有这些记录。
我尝试了定义此 JIRA 票证的解决方案 ,请帮帮我。谢谢