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),要么您最终会得到不完整的注册。
我正在使用 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),要么您最终会得到不完整的注册。