CannotAcquireLockException + LockAcquisitionException

时间:2017-05-10 14:47:15

标签: java hibernate spring-data

我正在调查我在Spring Data + Hibernate应用程序中遇到的问题。我在日志中发现了这个问题,但我试图理解为什么hibernate异常org.hibernate.exception.LockAcquisitionException会抛出一个Spring org.springframework.dao.CannotAcquireLockException

对于异常报告,我希望我的异常保持一致并抛出所有Hibernate异常。这可能吗?

Caught unhandled exceptionorg.springframework.dao.CannotAcquireLockException: could not update: [com.database.model.MyTable#22791]; SQL [update MyTable set x=1, etc]; nested exception is
org.hibernate.exception.LockAcquisitionException: could not update:[com.database.model.MyTable#22791]#  at
org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:246)#   at
org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:221)#  at
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:521)# at
org.springframework.transaction.support.AbstractPlatformTr

1 个答案:

答案 0 :(得分:0)

  

为什么hibernate异常org.hibernate.exception.LockAcquisitionException可以抛出一个Spring org.springframework.dao.CannotAcquireLockException

没有。捕获了hibernate异常,然后抛出Spring异常。

  

对于异常报告,我希望我的异常保持一致并抛出所有Hibernate异常。这可能吗?

我不确定我理解为什么这会比记录Spring异常更加一致,或者实际上是有益的。所有异常都从Throwable继承,它提供对其原因的访问,应该为由其他异常引起的所有Spring异常正确设置。因此,您当然可以导航原因链以查找要记录的异常。您甚至可能会发现各种Spring Exceptions中的一些方法很有用,例如getMostSpecificCause