第二个sql insert / update语句发生错误时,不抛出异常

时间:2018-06-11 06:59:19

标签: hibernate jpa grails jdbc gorm

我们遇到的问题是,我们的应用程序在某些情况下不会抛出SQL异常。 当第二个或更高版本的插入/更新语句发生错误时,会发生这种情况。此行为的描述为here

我们只会收到如下日志条目:ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Transaction was deadlocked on resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

这个问题是否已在其中一个较新版本的hibernate中修复?或者有任何人的想法,我们如何修补这个?

我们正在使用:

  • Grails 2.5.6
  • Hibernate 4.3.8
  • Hibernate JPA:2.1

示例:myObject.save()创建2个插入语句。一个进入基表,一个进入外表。第二个插入会导致错误,这会导致异常。

代码示例:

class Children {
    Parent parent
    String name
}
class Parent {
    static hasMany = [children: Children]
}

@Transactional
void save() {
    Parent parent = new Parent()
    parent.addToChildren(new Children(name: 'Bob'))
    parent.save() //more then 1 insert is executed
}

1 个答案:

答案 0 :(得分:-1)

'Children'必须具有'belongsTo'闭包,用于调用'Parent'的save()以将保存级联到'Children'。

static belongsTo = [parent: Parent]

参考:http://gorm.grails.org/6.0.x/hibernate/manual/#gormAssociation