我正在尝试在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()) {
...
}
}
非常感谢任何输入!
答案 0 :(得分:1)
Service
需要transaction
。
def afterInsert() {
User.withTransaction{
userService.makeUser(this)
}
}