我正在使用Grails应用程序,该应用程序在用户和任务之间具有一对多的关系。创建任务时,会出现错误:
类[class app.Task]的属性[user]不能为null或
无法延迟初始化角色集合:app.User.tasks,没有 session 或 session 被关闭
我能够在 bootstrap 中成功将任务保存给用户,但是无法在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)
}
最佳答案
直接使用存储在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
}
原因是用户已从休眠 session 中分离出来,并且您需要一个休眠 session 才能使所有持久性和GORM功能正常工作。
关于hibernate - 不能在grails中添加一对多关系- hibernate lazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20664391/