spring模板会将休眠异常包装到DataAccessExceptions
中。因此尝试直接捕获休眠异常将不起作用。像这样
try{
springdao.update(row)
}
catch(HibernateException e) {
//won't do
}
问题:
捕获DataAccessException包装的休眠异常的最佳实践是什么?只是
catch(DataAccessException)
吗?即使spring封装了该异常(在抛出异常时)。它只表现为原始的休眠异常。像下面一样,为什么?
无法将数据库状态与会话同步
org.hibernate.StaleObjectStateException:行已由更新或删除
另一笔交易(或未保存的值映射不正确):
最佳答案
我认为处理DataAccessException
而不是HibernateException
或SQLException
更好。因为它以更笼统的方式描述了问题。如果以后要更改ORM /数据库,它将以相同的方式处理与数据库相关的异常处理。并且它包含与Hibernate相同的异常。即使在非SQL数据库的情况下,也会引发相同的异常
Spring文档说:
此异常层次结构旨在让用户代码查找并处理
在不了解详细信息的情况下遇到的一种错误
使用的特定数据访问API(例如JDBC)。因此有可能
在不知道JDBC是
正在使用。