Как восстановиться после ошибки `don't flush the Session after an exception occurs`?

У меня есть два класса:

User

class User {
    //relationships. . . .
    static belongsTo = [ company : Company, role : Role ]
    static hasMany = [ holidays : Holiday ]
    String login
    String password
        static constraints = {
        login(unique:true,size:6..15)
        }
    String toString() {
        this.login
    }
}

И еще один класс вот такой:

Role:

class Role {
    String roleName
    String privilege
    static hasMany = [ user : User ]
        static constraints = {  
        privilege(nullable:true)
        roleName(unique:true)
        }
    String toString() {
        this.roleName
    }
}

Я написал интеграционный тест вот такой:

            def user1 = new User(login:"aravinth", password:"secret")
            def user2 = new User(login:"anto", password:"secret")
            def user3 = new User(login:"antoa", password:"secret")
            def role1 = new Role(roleName:"manager").save()
            def role2 = new Role(roleName:"devleoper").save()
            role1.addToUser(user1)      
            role1.addToUser(user2)      
            role2.addToUser(user3)  
            assert "manager" == user1.role.roleName

Этот тест работает нормально. Но когда я добавляю следующую строку в вышеупомянутый код теста:

def roleMembers = Role.findByRoleName("manager")

Я получаю ошибку следующего вида:

null id in mnm.schedule.User entry (don't flush the Session after an exception occurs)
org.hibernate.AssertionFailure: null id in mnm.schedule.User entry (don't flush the Session after an exception occurs)
    at org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:108)
    at mnm.schedule.RoleItntegrationTests.testAddingRolesToUser(RoleItntegrationTests.groovy:44)

Что происходит? Где я ошибся?

Я использую Grails 2.0.

Заранее спасибо.

5
задан Ant's 26 December 2011 в 17:25
поделиться