2012-09-25 41 views
0

我做的異常檢查,而在下面的方式保存數據:我需要清除Hibernate異常嗎?

try { 
     session.beginTransaction(); 
     session.update(person); 
     session.getTransaction().commit(); 
    } 
    catch(Exception e) { 
     session.getTransaction().rollback(); 
     log.error("Error saving person to database", e); 
    } 

但我有我的應用程序終止異常的地方之後。

(我爲了避免數據截斷誤差的做這項檢查。可能是有一種方法來檢查數據截斷,而不在Hibernate中引起異常?)

+2

什麼是導致您的應用程序終止的其他異常?發佈堆棧跟蹤。 – Jesper

回答

1

當一個Hibernate拋出異常,則不能使用導致該例外的會話。回滾是自動完成的。

如果你想在異常後繼續進行,你有兩種可能性:

  1. 扔掉舊的會話,並創建一個新的。

  2. 使用StatelessSession而不是會話。一個StatelessSession可以在異常之後使用。在無狀態會話中,您必須手動執行回滾。

通常情況下,你會怎麼做,如果你故意挑起一個例外,你有一個特殊的方式就可以解決的反應1.

解決方案2是非常有用的。 (例如,在插入操作中發生索引違規異常,並且在發生異常後執行更新而不是插入操作。)