0

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)    

ユーザー.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()) {
        ...
    }
}

どんな入力でも大歓迎です!

4

1 に答える 1

1

Serviceが必要transactionです。

def afterInsert() {
        User.withTransaction{
           userService.makeUser(this)
        }
    }
于 2013-06-03T13:24:18.590 に答える