spring - HibernateOptimisticLockingFailureException 将连接标记为 'closed' ?

标签 spring hibernate exception-handling database-connection optimistic-locking

我得到以下堆栈跟踪:

org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [com.btfin.wrapcore.request.MFRequest] with identifier [2850448]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.btfin.wrapcore.request.MFRequest#2850448]
  at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:672)
  at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:793)

这是由于乐观锁定异常。我可以解决这个问题的根本原因。

我的问题是 - 在这种情况下 - 异常处理将数据库连接设置为“关闭”。 (这会导致我的连接池出现问题)。

处理像HibernateOptimisticLockingFailureException这样的数据库异常的模式是什么?通过 Spring 和 hibernate 冒泡并返回关闭的连接?

您知道 Spring/Hibernate 代码中将连接设置为关闭的部分吗?

最佳答案

Hibernate Docs明确声明,如果在使用 Session 时发生任何异常,则 Session 之后不能重用。此外,每个 Session 可以包含多个事务,并且在每个事务提交后 - 同样发生,连接关闭。

但是在使用连接池时,连接并没有真正关闭,当调用 close() 方法时,connection is returned to the pool without physical closing :

when an application closes its connection, the underlying physical connection is recycled rather than being closed.



因此,如果您在物理关闭连接时遇到问题,我宁愿更多地关注池,而不是 Hibernate 或 Spring - 它们只能调用 close() ,这应该像我之前描述的那样工作。

关于spring - HibernateOptimisticLockingFailureException 将连接标记为 'closed' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10406746/

相关文章:

java - 谷歌应用程序引擎本地服务器手动缩放问题

java - 更新用户时,删除的对象将通过级联重新保存(从关联中删除删除的对象)

javascript - 如何捕获传递给 jQuery 的回调中抛出的异常?

php - 我应该抛出不同的异常类型吗?

java - 覆盖 application.properties 中的值

java - 如何在Spring中创建Service类对象

java - @Cascade Delete 不起作用(JPA、Hibernate 和 Spring mvc)

hibernate - 如何为 Hibernate 设置 Tomcat 7 Postgresql 数据源?

java - 更高级别的错误处理

java - 如何让Spring访问下拉框值