Hibernate Grails域对象在引导中保存时触发引用对象的保存

Hibernate Grails域对象在引导中保存时触发引用对象的保存,hibernate,grails,Hibernate,Grails,尝试运行Grails应用程序时,我的引导文件中出现以下错误: org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [com.example.MyObject] with identifier [1]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateExc

尝试运行Grails应用程序时,我的引导文件中出现以下错误:

org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [com.example.MyObject] with identifier [1]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.example.MyObject#1]
…这很奇怪,因为在引导中只有一个地方创建和保存对象本身。stacktrace指向我的引导中的一行,其中正在创建和保存另一个引用
MyObject
的对象,我们称之为
myReferenceGobject
<但是,代码>MyObject不会被修改,域对象中也没有引用它的钩子对其进行修改。还有几十个其他正在创建的对象引用相同的
MyObject
,而不会引起问题

我在
MyObject
中放置了一个
beforeUpdate
方法,该方法打印其堆栈跟踪,以查看是什么导致它被更新。最后有两个调用,一个来自第一次创建的
myreferencengobject
,另一个来自第二次创建的
myreferencengobject
,这会导致陈旧对象异常


当创建
myReferenceGobject
时,为什么hibernate会触发对
MyObject
的更新?为什么其他域对象没有出现这种情况?

如果没有实际的(或产生错误的测试版本)域类,就很难确定问题。我建议打开sql日志,查看每次保存时生成的sql;调试会更容易。关联可能会被保存,因为和
AutoRetrieveAssociations()
方法。错误的原因可能是使用hibernate不安全/无效,因此如果没有源代码,很难判断