Hibernate flush不会为stale对象抛出StalestateException(第一次刷新调用除外)

时间:2014-11-09 17:41:22

标签: java hibernate

我有一个具有复合ID的对象。计划正在进行中。

  • 步骤1.从数据库中读取对象。
  • 步骤2.更改了密钥的1-2个字段。设置为空白。
  • 步骤3.调用flush()。它会抛出StaleStateException
  • 步骤4.再次调用flush()。它不是扔 StaleStateException为一个案件投掷他人。{/ li>

根据我的理解,如果过时的对象附加到会话,那么除非我们清除会话,否则应该总是抛出StaleStateException

是否还有其他因素(清除除外)影响了我的第4步。我想知道为什么它不会为后续调用抛出StaleStateException

1 个答案:

答案 0 :(得分:1)

来自the documentation

  

如果Session抛出异常(包括任何SQLException),则立即回滚数据库事务,调用Session.close()并丢弃Session实例。 Session的某些方法不会使会话保持一致状态。 Hibernate抛出的异常都不能被视为可恢复的。确保通过在finally块中调用close()来关闭Session。

在抛出异常后,您尝试使用该会话,这将导致不可预测的行为,如文档所述。