2009-06-11 56 views
0

HI畢竟,控制Jboss的回滾休眠例外

我想保存的姓名,地址,電子郵件信息使用Hibernate ......有時有一個由Hibernate拋出一個異常,這將導致JBoss的回滾完整的交易!我不希望發生這種情況,如果在保存電子郵件時發生Hibernate異常......那麼我只想讓電子郵件位回滾而不是整個名稱,地址和電子郵件回滾 - 這正是JBoss所做的。我在保存操作中有一個try-catch塊,即使異常被捕獲,Jboss仍然繼續回滾。

有沒有人有任何建議,我可以如何實現這一點?

非常感謝。

回答

1

以上是一個很好的建議,但我有一點補充:

如果你是在JBoss,你直接使用Hibernate,或者您使用JPA(EJB3.0)?如果您使用的是EJB,則可以在方法調用中將使用@TransactionAttribute註釋的嵌套事務用於無狀態會話Bean。

如果你直接使用Hibernate,你應該真的考慮使用JBoss提供的抽象層(JPA)(假設你運行的是JBoss 4+)

0

你需要的是一個嵌套事務,不幸的是hibernate不支持嵌套事務,所以恐怕你的運氣不好。您唯一真正的選擇是在兩個單獨的交易中執行更新。

YourTransactionalService service = ; 

service.updateNameAndAddress(details); 

try{ 
    service.updateEmail(details); 
}catch(HibernateException e){ 
    // could just ignore it? 
} 

你可能什麼看就是爲什麼Hibernate拋出一個異常,也許驗證前期,以防止它在第一種情況下的數據,這可能會在這裏討論實際的基礎問題,而不是我的解決方案,它只是一方的步驟它。