有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java就是EJB2。0事务回滚撤消/还原数据库更改?

假设我在我的ejbbean方法中编写了一些与事务相关的代码,如下所示:

UserTransaction utx = sessionContext.getUserTransaction();
try {
    int status = 0;
    utx.begin();
    status = 1;
    //SEGMENT- 1: UPDATE DATABASE

    //SEGMENT- 2: SOME OTHER CODE - which may throw Exception

    utx.commit();
} catch (Exception e) {
    utx.rollback();//SEGMENT- 3: My QUESTION at here, is it bollbak DATABASE changes also? 
                    // OR only rollback value of variable 'status' to '0'
    e.printStackTrace();
}

1。开始:开始我的交易后utx.begin();
更改了java变量status = 1;
更改了数据库(段-1)。e、 g.在数据库中进行一些插入和更新
然后执行其他一些计算(段-2

2。提交:现在在提交之前utx.commit()
在(段-2)出现一些异常

3。回滚:所以catch块捕获异常(段-3)并执行事务回滚^{

我的问题:
utx.rollback()回滚
所有数据库更改和java变量更改吗?
只有数据库更改
或仅回滚java变量更改


共 (2) 个答案

  1. # 1 楼答案

    utx.begin()之后进行的所有数据库更改都将回滚

    utx.rollback()对java变量没有影响

  2. # 2 楼答案

    我想延长史蒂夫·C的回答

    另一个重要的一点是,如果我们对任何数据库级别进行了提交,那么这些更改永远不会被EJB utx.rollback()回滚

    例如,如果我们执行

    stmt.executeUpdate("COMMIT");
    

    或者在调用的任何包或存储过程中显式执行COMMIT 然后发生数据库级提交