Grails中的数据库迁移插件的Hibernate问题

时间:2014-03-26 07:22:05

标签: hibernate grails gorm grails-2.0 grails-plugin

我有一个" grailsChange" changeSet,它不断 生成一个

org.hibernate.HibernateException:连接代理后不可用 交易完成

grailsChange {
   change {
      def list1 = [record1,record2]
      list1.each {
         DomainClass.withTransaction {
            new DomainClass(it).save(failOnError: true)
         }
      }
   }
}

2 个答案:

答案 0 :(得分:0)

我们遇到了同样的问题。在我们的案例中的解决方案是,我们从Domain Class的beforeValidate调用了一个服务方法,并且该服务是事务性的。所以在服务中添加静态transactional = false修复了我们的问题。

答案 1 :(得分:0)

在编写使用grailsChange的迁移时遇到了同样的问题。就我而言,它会成功运行数百个事务,然后在最可能与grailsChange本身关联的最外层事务上失败。

withTransaction切换到withNewSession解决了这个问题。

should not need to manually flush the new session。如果您仍然遇到问题,我建议您在保存调用中添加validate:trueflush:true并使用GrailsChange.groovy中的error(String message)方法。

grailsChange {
    change {
        def list1 = [record1,record2]
        list1.each {
            DomainClass.withTransaction {
                def domain = new DomainClass(it)
                if (!domain.save(validate: true, flush: true)) {
                    error("There was a problem saving the domain.")
                }
            }
        }
    }
}