1

我目前正在从事一个在不同数据库上使用数据访问的项目。我们的主数据库通过 Hibernate 访问(通过Criteria框架或 HQL 查询),但我们也可以使用普通的 JDBC/SQL 查询(通过 Spring-Jdbc)访问其他数据库。

对于我们的一些 JDBC 调用,我们不得不处理 DAO 层抛出一些 Spring runtime 风格的可能性TransientDataAccessException,比如DeadlockLoserDataAccessException, 或CannotAcquireLockException.

我的问题:我们是否应该为 Hibernate DAO 抛出的类似异常做准备?编写会出现此类异常的测试非常困难,如果无法抛出它们,我不想为这些异常构建支持。如果可以,具体有哪些例外?你怎么看?

4

2 回答 2

1

看看hibernate Session api,http ://docs.jboss.org/hibernate/annotations/3.5/api/index.html?org/hibernate/Session.html你;具体来说,createQuery 和 createCriteria。

createQuery,它接受一个 hql 字符串,返回一个 Query 对象并抛出一个 HibernateException。createCriteria 返回一个没有抛出异常的 Criteria 对象。在 Criteria 或 Query 对象上调用 .list() 会引发 HibernateException。

大多数函数调用,如果它们抛出异常,就会抛出 HibernateException。除了 HibernateException 之外,还有一些特殊情况,例如在 Query 对象上调用 uniqueResult() 会引发 NonUniqueResultException。

于 2011-10-04T16:18:14.537 回答
1

从 Spring 支持的持久性实现抛出的异常并不是真正植根于 Spring => 它们是数据访问异常

因此,您可以从纯 Hibernate 实现中获得类似的异常,例如:

LockAcquisitionException : 表示在数据库上获取锁时出现问题

话虽如此,专门针对这些异常进行测试是不明智的。因此它们是RuntimeExceptions。如果您从 Spring 支持的实现中获得这些异常,我宁愿专注于解决问题。

于 2011-10-07T20:26:45.297 回答