使用Grails GORM和MySQL的乐观锁定异常

时间:2015-05-13 04:01:13

标签: grails gorm

我正在使用Grails 2.4.4和MySQL数据库。我们正在尝试克隆具有父子关系的数据库中的一组表。例如,我们有一个表作者及其子表书和书,其中外键fk_book指向作者。

我们通过Author.get(id),克隆作者及其相关书籍检索层次结构,并使用clonedAuthor.save(flush:true)进行保存。我们有这样的几个表的层次结构,一些具有OneToOne,一些具有OneToMany关系。在数据库中,外键约束为ON DELETE NO ACTION。

问题是在调用时。它正在抛出乐观锁定失败例外

Row was updated or deleted by another transaction.

我没有得到哪个事务正在更新行,因为我们只有一个事务(只有一个事务)。

2 个答案:

答案 0 :(得分:2)

当使用mysql控制台修改db数据时,我遇到了同样的问题,而某些数据已经被提取到hibernate会话。

为什么会发生这种情况?

很简单,db和hibernate会话中的数据不同步。

此外,如果您在会话中放置域对象(或任何相关域对象),请在调用obj.attach()之前重新附加对象(save),delete .. < / p>

答案 1 :(得分:0)

您有3种解决方案:在save()之前执行merge()或attach()...或映射版本为false的实体。