我正在使用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()
...为什么我要故意回滚我的更改?你能不能得到一个例子?
答案 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),或者您最终注册不完整。