使用 Grails GORM 和 MySQL 的乐观锁定异常
Optimistic Locking Exception using Grails GORM and MySQL
我正在使用 Grails 2.4.4 和 MySQL 数据库。我们正在尝试在我们的数据库中克隆一组具有父子关系的 table。例如,我们有一个 table 作者及其子 table 书和具有指向作者的外键 fk_book 的书。
我们通过 Author.get(id)
、克隆作者及其相关书籍检索层次结构,并使用 clonedAuthor.save(flush:true)
进行保存。我们有几个像这样的 table 的层次结构,一些具有 OneToOne 关系,一些具有 OneToMany 关系。在数据库中,外键约束被指定为 ON DELETE NO ACTION。
问题出在调用时。它正在抛出乐观锁定失败异常
Row was updated or deleted by another transaction.
我没有得到哪个事务正在更新行,因为我们只有一个事务(只有一个命中)。
我在使用 mysql 控制台 修改数据库数据时遇到了同样的问题,而一些数据已经提取到休眠会话 。
为什么会这样?
很简单,db和hibernate session中的数据不同步
此外,如果您将域对象(或任何相关域对象)放入会话中,请在调用 save
、delete
之前尝试重新附加对象 (obj.attach()
)。 .
您有 3 种解决方案:merge() 或 attach() before save()... 或映射版本为 false 的实体。
我正在使用 Grails 2.4.4 和 MySQL 数据库。我们正在尝试在我们的数据库中克隆一组具有父子关系的 table。例如,我们有一个 table 作者及其子 table 书和具有指向作者的外键 fk_book 的书。
我们通过 Author.get(id)
、克隆作者及其相关书籍检索层次结构,并使用 clonedAuthor.save(flush:true)
进行保存。我们有几个像这样的 table 的层次结构,一些具有 OneToOne 关系,一些具有 OneToMany 关系。在数据库中,外键约束被指定为 ON DELETE NO ACTION。
问题出在调用时。它正在抛出乐观锁定失败异常
Row was updated or deleted by another transaction.
我没有得到哪个事务正在更新行,因为我们只有一个事务(只有一个命中)。
我在使用 mysql 控制台 修改数据库数据时遇到了同样的问题,而一些数据已经提取到休眠会话 。
为什么会这样?
很简单,db和hibernate session中的数据不同步
此外,如果您将域对象(或任何相关域对象)放入会话中,请在调用 save
、delete
之前尝试重新附加对象 (obj.attach()
)。 .
您有 3 种解决方案:merge() 或 attach() before save()... 或映射版本为 false 的实体。