Когда я получаю сообщение об ошибке проверки (не очищайте сеанс после возникновения исключения) сообщение об ошибке, почему? - PullRequest
0 голосов
/ 11 марта 2012

У меня есть класс домена с именем Project:

class Project { 
        static hasMany = [ tasks : Tasks , users : User ] 
        static belongsTo = User 
        String name 
        static constraints = { 
                name(nullable:false,unique:true, size:5..20) 
                tasks(nullable:true) 
                users(nullable:true) 
        } 
        String toString() { 
                this.name 
        } 
} 

Я использую следующий код для сохранения экземпляров Project:

def save() { 
        def user = User.get(springSecurityService.principal.id) 
        def projectInstance = new Project(params) 
        projectInstance.addToUsers(user) 
        if (!projectInstance.save(flush: true)) { 
            render(view: "create", model: [projectInstance: projectInstance]) 
            return 
        } 
      flash.message = message(code: 'default.created.message', args: [message(code: 'project.label', default: 'Project'), projectInstance.id]) 
        redirect(action: "showCreatedProject", id: projectInstance.id) 
    } 

Приведенный выше код работает нормально, еслиЯ даю Project name, который проходит проверку класса домена.Но если я даю что-то вроде fail как Project name (что не проходит валидацию класса домена), я получаю такую ​​ошибку:

Message: null id in mnm.schedule.Project entry (don't flush the Session after an exception occurs) 
Trace:   Line | Method 
->> 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   908 | run     in     '' 
^   662 | run . . in java.lang.Thread 

Я очень плохо знаком с Grails, яне знаю, почему возникает эта ошибка.Как я могу избавиться от этой ошибки?

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

1 Ответ

3 голосов
/ 11 марта 2012

addToUsers() нужен уже сохраненный объект, потому что ему нужен заполненный идентификатор для создания отношений. Вы должны вызывать этот метод после .save()

...