使用BootStrap.groovy中的hibernate事件创建域实例

时间:2013-06-03 12:11:28

标签: hibernate grails gorm bootstrapping

我正在尝试在BootStrap.groovy文件中创建用户域对象,但收到以下错误:

[ERROR]:AssertionFailure  an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)

域对象如下所示:从afterInsert方法中调用服务时出现问题。该服务是非null并且在其上调用任何方法,包括toString()或inspect(),似乎都会导致错误。

BootStrap.groovy中

def newUser = new User(...)
newUser.save(flush:true, failOnError: true)    

User.groovy

class User extends Auth {
    transient def userService

    ...

    def afterInsert() {
        log.debug "SERVICE: ${userService == null ? 'NULL': 'NOT NULL'}" // Gives: SERVICE: NOT NULL

        // Either of the following lines cause the error when uncommented
        //log.debug "SERVICE: ${userService.toString()}"
        //userService?.makeUser(this)
    }

}

使用BootStrap是否可以实现这一点,还是我有一些根本错误的东西?

或者,从BootStrap调用时是否可以忽略此代码?例如。类似于:

def afterInsert() {
    if (notBootStrap()) {
        ...
    }
}

非常感谢任何输入!

1 个答案:

答案 0 :(得分:1)

Service需要transaction

def afterInsert() {
        User.withTransaction{
           userService.makeUser(this)
        }
    }