我有一个" grailsChange" changeSet,它不断 生成一个
org.hibernate.HibernateException:连接代理后不可用 交易完成
grailsChange {
change {
def list1 = [record1,record2]
list1.each {
DomainClass.withTransaction {
new DomainClass(it).save(failOnError: true)
}
}
}
}
答案 0 :(得分:0)
我们遇到了同样的问题。在我们的案例中的解决方案是,我们从Domain Class的beforeValidate调用了一个服务方法,并且该服务是事务性的。所以在服务中添加静态transactional = false修复了我们的问题。
答案 1 :(得分:0)
在编写使用grailsChange
的迁移时遇到了同样的问题。就我而言,它会成功运行数百个事务,然后在最可能与grailsChange
本身关联的最外层事务上失败。
从withTransaction
切换到withNewSession
解决了这个问题。
你should not need to manually flush the new session。如果您仍然遇到问题,我建议您在保存调用中添加validate:true
和flush: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.")
}
}
}
}
}