2011-10-04 17 views
1

我目前正在使用不同數據庫上的數據訪問的項目。我們的主數據庫通過Hibernate(通過Criteria框架或HQL查詢)訪問,但我們也可以使用普通JDBC/SQL查詢(通過Spring-Jdbc)訪問其他數據庫。Hibernate的數據訪問是否會拋出類似Spring DeadlockLoserDataAccessException或其他TransientDataAccessException的異常?

對於我們的一些JDBC調用,我們必須處理DAO層拋出Spring運行時TransientDataAccessException的一些風味的可能性,如DeadlockLoserDataAccessExceptionCannotAcquireLockException

我的問題:我們應該計劃Hibernate DAO引發的類似異常嗎?編寫可能會出現此類異常的測試非常困難,如果不能拋出這些異常,我不想爲這些異常構建支持。如果可以的話,究竟有哪些例外?你怎麼看?

回答

1

從Spring支持的持久性實現中拋出的異常並非真正植根於Spring =>它們是數據訪問異常

因此,你從一個純粹的Hibernate實現例如可以得到類似的例外:

LockAcquisitionException:指示數據庫

上獲取的鎖有問題說了這麼多,測試這些異常具體做法並不明智。因此他們是RuntimeException s。如果你從Spring支持的實現中獲得這些異常,我寧願專注於解決問題的

+0

是的,我得出了同樣的結論。嘗試捕獲指示架構中存在問題的異常沒有意義。更好地解決問題。 – Guillaume

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對象。在條件或查詢對象上調用.list()會拋出HibernateException異常。

大多數函數調用,如果它們拋出異常,會拋出HibernateException異常。有一些特殊情況,例如在Query對象上調用uniqueResult(),除了HibernateException外,還會拋出NonUniqueResultException異常。

+0

是的我知道這些,我更多地詢問與我列出的類似的例外。我想我的問題更多:當Hibernate遇到死鎖或類似問題時會發生什麼?它是否嘗試自行解決它,是否會拋出特定的異常?我想我會瀏覽HibernateException下的異常層次結構。無論如何回答,我投票支持你! – Guillaume

相關問題