我的问题与事务和异常有关
要求:
我有 10 条记录要插入到数据库表中。插入每条记录后,我将数据插入另一个表。因此,如果插入第二个表失败,我想回滚该记录。
前任。假设一次处理 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) 注释创建的。
我们想要的功能是:即使 TransferRecord 的事务失败(比如 2),我希望为记录 0、记录 1、记录 3、记录 4 提交数据(等等......但不是记录 2)
但这里的问题是:当 TransferRecord 2 失败并且当我移动到 TransferRecord 3 时,我收到“会话关闭”错误。
我的疑问是: 1. 这是一个正确的方法吗?或者我应该在 EJB 2 之外运行 for 循环(对于每个 TransferRecord)。如何确保会话未关闭但事务回滚(仅适用于特定失败的事务)
先感谢您。
我正在使用 EJB3、Hibernate 3.x、Jboss 4.2.x,并且我正在使用容器管理事务。