我有一個域類名爲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的,我不知道爲什麼這個錯誤發生。我如何擺脫這個錯誤?
在此先感謝。
之後調用這個方法如果你刪除了顯式刷新調用,你仍然會得到異常嗎?所以save()而不是save(flush:true)? – Gregg 2012-03-11 05:21:40
@Gregg:雅我已經嘗試過了,它會導致相同的錯誤。但我發現問題出在這個'projectInstance.addToUsers(user)'行。當我評論這條線時,一切正常。但我不知道如何保持這一線,仍然逃避那個錯誤! – 2012-03-11 05:33:24
addToUsers()需要已經保存的對象,似乎需要爲這個對象填充ID來建立關係。你可以嘗試在.save()之後調用這個方法嗎? – 2012-03-11 06:28:08