无法在grails中添加一对多关系--hibernate lazyInitializationException

时间:2013-12-18 17:17:49

标签: hibernate grails

我正在开发一个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)
}

1 个答案:

答案 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良好的正常工作。

相关问题