黑马程序员技术交流社区
标题:
请教这2代码,执行的时候有什么不同.
[打印本页]
作者:
HeiMa-黄倲江
时间:
2012-10-25 22:24
标题:
请教这2代码,执行的时候有什么不同.
第一:
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
session.save(user);
tx.commit();
}finally{
if(session != null){
session.close();
}
}
第二:
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
session.save(user);
tx.commit();
}catch(HibernateException e){
tx.rollback();
e.printStackTrace();
}
finally{
if(session != null){
session.close();
}
}
作者:
王禹衡
时间:
2012-10-25 22:33
异常处理不同啊 第二个通过catch捕捉异常并回滚进程,打印错误异常
作者:
HeiMa-黄倲江
时间:
2012-10-25 22:39
wangyuheng 发表于 2012-10-25 22:33
异常处理不同啊 第二个通过catch捕捉异常并回滚进程,打印错误异常
那执行第一段代码的时候,不用回滚事物吗?
还是执行到数据库的时候,会自己回滚事物,
这2代码,除了能打印出异常之外.还有别的什么不同吗?
作者:
付维翔
时间:
2012-10-25 22:49
这个两处代码的不同之处在于,前者没有捕获异常,调用rollback()方法。而后者,捕获并做了处理,调用了rollback()方法。在实际用的时候,两者都能保障事务的一致性。但是这些应该是有前提的:假如,我们没有启自动回滚事务的功能,但第一段代码,就不能保证事务的一致性。根据Hibernate的源码,我们可以得知:rollback()方法的功能用于表示,强制事务回滚。因此,建议使用第二种方式,安全
作者:
李连闯
时间:
2012-10-25 23:10
第一段代码的问题在于,没有处理进行捕捉和处理 数据保存的过程中出现的 可能会造成程序运行中断的致命异常,这是不正确的做法,
回滚的原因在于,如果异常产生,而且操作已经对数据库进行了部分修改导致了数据的不正确性,就需要撤销异常发生前执行过的错误操作,使数据库的数据保持正确的状态,所以第二段代码才是正确的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2