userTransaction 回滚方法在使用中吗?

userTransaction rollback method in use?

我正在使用 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()... 为什么我要故意回滚我的更改?你不能举个例子吗?

如果您需要执行多个 insert/update/delete 操作并且您希望它们全部或 none 成功,则回滚很有用。

比如你插入一个新的用户信息,需要在不同的table中插入数据,你可能希望它们都成功,而不是只在某些table中插入数据s.

已编辑

例如,假设您的数据库中有 3 个 table: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();
   }

现在假设在 table ADDRESS 的插入操作期间出现了一些错误并且插入失败。您可能想要在 table USER 中重做之前的插入,因为要么用户的所有信息都已成功插入(包括 ADDRESS 和 TELEPHONE),要么您最终会得到不完整的注册。