userTransaction回滚方法正在使用中?

时间:2015-01-06 15:43:25

标签: java spring jta

我正在使用JBoss JTA 1.1

想象一下,我有以下DAO方法:

public void addEmployee(final Employee e){
    try {
        userTransaction.begin();
    } catch (Exception e1) { }
    final String sql = "INSERT INTO users (name) VALUES(?)";
    KeyHolder kh = new GeneratedKeyHolder();
    JdbcTemplate = getJdbcTemplate(); //Inherited from JdbcDaoSupport

    //Some data operations

    try {
        userTransaction.rollback(); //Why can use it?
    } catch (Exception e1) { }
}

最初的问题我不想滚动数据操作所做的更改。好的,userTransaction.commit();非常有用。但rollback() ...为什么我要故意回滚我的更改?你能不能得到一个例子?

1 个答案:

答案 0 :(得分:2)

如果您需要执行多个插入/更新/删除操作并且希望它们全部或全部都不成功,则回滚非常有用。

例如,如果要插入新的用户信息并且需要在不同的表中插入数据,则可能希望它们都成功,而不仅仅是在某些表中插入数据。

<强>编辑

例如,您可以说,数据库中有3个表:USER,ADDRESS和TELEPHONE。新用户在您的应用程序中注册,在您的代码中,您可以使用以下内容:

   try {
      userTransaction.begin();

      //operation to insert information in table USER

      //operation to insert information in table ADDRESS

      //operation to insert information in table TELEPHONE

      userTransaction.commit();
   } catch (Exception e) {
      userTransaction.rollback();
   }

现在想象一下,在表ADDRESS的插入操作期间,存在一些错误,插入失败。您可能希望重做表USER中的先前插入,因为用户的所有信息都已成功插入(包括ADDRESS和TELEPHONE),或者您最终注册不完整。