hibernate - 不能在grails中添加一对多关系- hibernate lazyInitializationException

标签 hibernate grails

我正在使用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/

相关文章:

hibernate - Grails和第3方工具使用相同的数据库:第3方删除后如何更新grails?

java - 从 Groovy 迁移到 Java

java - Eclipse dao组件实现错误

java - Camel 中的 JPA 组件无法自动重新连接到数据库

hibernate - TransactionRequiredException : Executing an update/delete query

grails - 如何从日历 :datePicker and make an ajax call? 中获取日期

grails - 简单的grails rc1集成测试失败

grails - Groovy 在 list.find 调用上给出 NPE,但仅在一段时间之后

java - Hibernate org.apache.xerces.parsers.SAXParser 未实现 XMLReader 异常

java - Hibernate使用PostgreSQL序列不影响序列表