多对多乐观锁定失败

时间:2015-08-24 09:05:24

标签: grails gorm

我有两个属于多对多关系的DomainClasses:

class Foo {
   static hasMany=[bars:Bar]
}
Class Bar {
   static belongsTo = [Foo]
   static hasMany=[foos:Foo]
} 

现在我想像这样添加一个Bar到Foo:

Foo foo = Foo.get(params.fooId)
Bar bar = Bar.get(params.barId)
if(!foo || !bar)
   return render(template:'error')
foo.addToBars(bar)
foo.save(flush:true, failOnError:true)
return render(template:'success')

这会产生HibernateOptimisticLockingFailureException

org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException:具有标识符[1]的类[test.Foo]的对象:乐观锁定失败;嵌套异常是org.hibernate.StaleObjectStateException:Row被另一个事务更新或删除(或者unsaved-value映射不正确):[test.Foo#1]

为什么会出现此错误?

1 个答案:

答案 0 :(得分:0)

尝试在域中映射junction table'映射部分,根据以下代码:

class Foo {
   static hasMany = [bars:Bar]

   // etc

   static mapping = {
        // etc
        bars joinTable:[name: 'foo_bar', key: 'foo_id']     
    }
}

其他域名也是如此

class Bar {
   static belongsTo = Foo
   static hasMany = [foos:Foo]

   // etc

   static mapping = {
        // etc
        foos joinTable:[name: 'foo_bar', key: 'bar_id']     
    }
} 

最后,使用foo.addToBars(bar)并保存。