Hibernate问题!

来源:百度知道 编辑:UC知道 时间:2024/06/02 02:08:17
public class ManagerImplDao implements IManagerDao {

public int Add(Users users) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(users);
tx.commit();
} catch (Exception e) {
if (null != tx) {
tx.rollback();
return 0;
}
} finally {
session.close();
}
return 1;
}

我想问问 catch块中的if判断 为什么tx不等于空的时候 事务要回滚 等于空的时候则判定为成功呢?
请前辈指点迷津 谢谢!

你是怎么看的,这段代码的意思根本不是你说的那样

catch块里的意思是如果捕获到异常就回滚事务,但是异常可能是由于tx为空引起的,所以rollback的时候要确认tx是否为null,不然在tx.rollback的时候又要抛空指针异常了。

不是等于空的时候判定成功,是没进catch块判定成功,也就是没抛异常的时候判定成功,花括号匹配得看对了

如果程序进入了catch块了,那么说明你的事务操作已经有问题了,也肯定是有事务了,tx自然就不为空了,你的数据库操作出现异常了,那么必然要回滚事务,取消操作,不能允许错误的操作保留在数据库中啊。rollback的时候确认tx是否为null,如果是就肯定会抛空异常啊,而不是判断成功。
至于事务开始置空,是声名变量而已,commit/rollback代表一个事务的结束。

程序依次从上往下执行, tx.commit() 如果提交成功的话, tx会为空
如果不等于空,说明程序出错了 tx没提交上去自然要rollback()