我的应用程序通过套接字连接接收频繁的远程事件,每个启动一个新线程,后续操作通常会触发每次保存相同的对象图,只有一个锁定的静态会话。但是,当执行该保存时,有时会收到新的更新,这会将新元素添加到同一对象图中。我认为这是例外的原因:
TransientObjectException
object references an unsaved transient instance -
save the transient instance before flushing.
如果这是原因,那是可以理解的。但是我如何防止这种异常?如果我让事务回滚,则会发生后续异常,如StaleStateObject,然后是NonUniqueObjectException。
那么如何处理或预防?
答案 0 :(得分:1)
有两种方法可以防止错误:
Save()
手动新创建的引用对象cascade
设置,因此以上情况自动发生(我个人更喜欢这个)当然,当您打算引用现有对象时,或者即使使用锁也存在线程问题,您完全有可能创建新对象。
答案 1 :(得分:-1)
可能的原因是,如果此异常是在SaveOrUpdate期间(在不同的线程中)迭代集合时正在修改实体集合。所以我认为必须放置锁以避免这些并发行为。