Hibernate数据访问是否可以抛出类似于Spring DeadlockLoserDataAccessException或其他TransientDataAccessException的异常?

时间:2011-10-04 15:26:04

标签: java hibernate spring exception-handling runtimeexception

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

对于我们的一些JDBC调用,我们必须处理DAO层抛出一些类型的Spring运行时TransientDataAccessException的可能性,如DeadlockLoserDataAccessExceptionCannotAcquireLockException

我的问题:我们应该计划Hibernate DAO抛出的类似异常吗?编写会出现此类异常的测试非常困难,如果不能抛出这些异常,我也不想建立对它们的支持。如果可以的话,究竟是哪些例外?你觉得怎么样?

2 个答案:

答案 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支持的实现中获得这些异常,我宁愿专注于解决问题。