我的問題是有關交易和異常ApplicationException的 - 爪哇 - 休眠 - 回滾相關
要求:
我有10條記錄插入到數據庫表中。插入每條記錄後,我將數據插入另一個表中。所以如果插入到第二個表失敗,我想要回滾該記錄。
Ex。 說一次處理10人的現金轉移(從一個賬戶到另一個賬戶)。
僞代碼: ------------- EJB方法的開始
for(int i = 0; i < TransferRecords.length; i++)
{
try
{
//Deduct cash from TransferRecord.accountFrom --- Includes use of Hibernate Session
//Add cash in TransferRecord.accountTo -- Includes use of Hibernate Session
} catch(AppException exception)
{
//Rollback the transaction only for this particular transfer (i)
// But here when I go for next record it says session is closed
}
}
--------- EJB方法結束
這裏AppException是使用@ApplicaitonException(rollback = true)annotion創建的。
我們想要的功能是:即使事務對TransferRecord失敗(比如說2),我希望數據被提交記錄0,記錄1,記錄3,記錄4(等等......但不是記錄2)
但這裏的問題是:當TransferRecord 2失敗,當我移動到TransferRecord 3,我得到「會話關閉」錯誤。
我的疑惑是: 1.這是一個正確的方法嗎?或者我應該在EJB 之外運行for循環(對於每個TransferRecord)2.如何確保會話未關閉但事務已回滾(僅限於特定失敗事務)
謝謝提前。
我正在使用EJB3,Hibernate 3.x,Jboss 4.2.x,並且我正在使用容器管理事務。
新鮮實體管理器之外感謝Pascal。順便說一句,你如何回滾交易?你是否傳播一個RuntimeException或者你調用setRollbackOnly()?我只是好奇。 我們只拋出RuntimeException。 我們正試圖避免整體上的用戶交易。但是你的代碼很有前途。 再次感謝。 – 2010-01-08 19:59:29
我不確定是否有僞代碼,但我沒有添加任何東西:) – 2010-01-08 20:33:54