我目前正在开发一个在不同数据库上使用数据访问的项目。我们的主数据库是通过Hibernate访问的(通过Criteria
框架或HQL查询),但我们也可以使用普通的JDBC / SQL查询(通过Spring-Jdbc)访问其他dbs。
对于我们的一些JDBC调用,我们必须处理DAO层抛出一些类型的Spring运行时TransientDataAccessException
的可能性,如DeadlockLoserDataAccessException
或CannotAcquireLockException
。
我的问题:我们应该计划Hibernate DAO抛出的类似异常吗?编写会出现此类异常的测试非常困难,如果不能抛出这些异常,我也不想建立对它们的支持。如果可以的话,究竟是哪些例外?你觉得怎么样?
答案 0 :(得分: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。有一些特殊情况,比如在Query对象上调用uniqueResult(),除了HibernateException之外还会抛出NonUniqueResultException。
答案 1 :(得分:1)
Spring支持的持久性实现引发的异常并不是真正植根于Spring =>它们是数据访问异常。
因此,可以从纯Hibernate实现中获得类似的异常,例如:
LockAcquisitionException:表示在数据库上获取锁定时出现问题
话虽如此,具体测试这些例外并不明智。因此它们是RuntimeException
。如果您从Spring支持的实现中获得这些异常,我宁愿专注于解决问题。