我目前正在研究一个在不同数据库上使用数据访问的项目。我们的主数据库是通过Hibernate(通过Criteria
框架或HQL查询)访问的,但是我们也可以使用普通的JDBC/SQL查询(通过Spring-Jdbc)访问其他数据库。
对于我们的一些JDBC调用,我们必须处理DAO层抛出一些Spring运行时TransientDataAccessException
风格的可能性,如DeadlockLoserDataAccessException
或CannotAcquireLockException
。
我的问题是:我们应该为Hibernate dao抛出的类似异常做计划吗?编写显示此类异常的测试是非常困难的,如果它们不能抛出,我不想构建对这些异常的支持。如果可以,具体有哪些例外呢?你觉得呢?
从Spring支持的持久性实现抛出的异常并不真正根植于Spring =>它们是数据访问异常。
因此,可以从纯Hibernate实现中获得类似的异常,例如:lockacquitionexception:表示获取数据库锁有问题
话虽如此,专门测试这些异常是不明智的。因此它们是RuntimeException
。如果您从Spring支持的实现中得到这些异常,我宁愿关注解决问题。
看看hibernate Session api, http://docs.jboss.org/hibernate/annotations/3.5/api/index.html?org/hibernate/Session.html you;特别是createQuery和createcrcriteria。
createQuery,它接受一个hql字符串,返回一个Query对象并抛出一个HibernateException。createCriteria返回一个没有抛出异常的Criteria对象。在Criteria或Query对象上调用.list()会抛出一个HibernateException。
大多数函数调用,如果抛出异常,抛出一个HibernateException。有一些特殊的情况,比如在一个Query对象上调用uniqueResult(),除了会抛出一个HibernateException之外,还会抛出一个NonUniqueResultException。