我正在开发一个grails应用程序,它在用户和任务之间具有一对多的关系。当我创建任务时,我得到一个错误:
类[class app.Task]的属性[user]不能为null或 懒得初始化角色集合:app.User.tasks,没有关闭会话或会话
我能够在引导程序中成功将任务保存到用户,但在TaskController中无法执行此任务。
我很确定我有一行代码错了,我想知道它是什么。我的代码如下。
def save() {
def taskInstance = new Task(params)
println "attempting to save ${session.user.toString()}"
println "adding task to user"
def tasks = session.user.getTasks()
println "got tasks"
println "adding task to user"
session.user.addToTasks(taskInstance) <--error here
println "task added successfully"
if (!taskInstance.save(flush:true)) {
println "task saved and flushed"
render (view: "create", model: [taskInstance: taskInstance])
return
}
flash.message = message(code:'default.created.message',
args: [message(code: 'task.label', default: "Task"), taskInstance.id])
redirect(action:"show", id:taskInstance.id)
}
答案 0 :(得分:1)
直接使用存储在Http Session中的对象通常不是一个好主意。我要做的是以下几点:
def save() {
def user = User.get(session.user.id)
// or
def user = session.user.merge() // not 100% this would work right
... all your other code
}
原因是用户与hibernate会话分离,你需要一个hibernate会话来保持所有持久性和GORM良好的正常工作。