2

我的应用程序通过套接字连接接收频繁的远程事件,每次启动一个新线程,随后的操作通常会触发每次保存相同的对象图,并具有单个锁定的静态会话。但是当保存执行时,有时会收到新的更新,这会将新元素添加到同一个对象图中。我认为这是例外的原因:

TransientObjectException
object references an unsaved transient instance - 
save the transient instance before flushing.  

如果是这个原因,那是可以理解的。但是我如何防止这个异常呢?如果我让事务回滚,则会发生后续异常,例如 StaleStateObject,然后是 NonUniqueObjectException。

那么如何处理或防止这种情况呢?

4

2 回答 2

1

有两种方法可以防止错误:

  • Save()手动新建的引用对象
  • 为关系设置适当cascade的设置,所以上面会自动发生(我个人更喜欢这个)

当然,当您打算引用现有对象时,您完全有可能创建一个新对象,或者即使使用锁也存在线程问题。

于 2012-07-26T02:38:06.167 回答
-1

如果此异常是在 SaveOrUpdate 期间(在不同的线程中)迭代集合时正在修改实体集合,则可能的原因。所以我认为必须放置锁以避免这些并发操作。

于 2012-08-17T09:49:40.283 回答