我有两个属于多对多关系的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]
为什么会出现此错误?
答案 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)
并保存。