spring模板会将休眠异常包装到DataAccessExceptions中。因此尝试直接捕获休眠异常将不起作用。像这样

try{
    springdao.update(row)
}
catch(HibernateException e) {
    //won't do
}


问题:


捕获DataAccessException包装的休眠异常的最佳实践是什么?只是catch(DataAccessException)吗?
即使spring封装了该异常(在抛出异常时)。它只表现为原始的休眠异常。像下面一样,为什么?



  无法将数据库状态与会话同步
  org.hibernate.StaleObjectStateException:行已由更新或删除
  另一笔交易(或未保存的值映射不正确):

最佳答案

我认为处理DataAccessException而不是HibernateExceptionSQLException更好。因为它以更笼统的方式描述了问题。如果以后要更改ORM /数据库,它将以相同的方式处理与数据库相关的异常处理。并且它包含与Hibernate相同的异常。即使在非SQL数据库的情况下,也会引发相同的异常

Spring文档说:


  此异常层次结构旨在让用户代码查找并处理
  在不了解详细信息的情况下遇到的一种错误
  使用的特定数据访问API(例如JDBC)。因此有可能
  在不知道JDBC是
  正在使用。

07-24 09:44
查看更多