--->事务管理与session的获取方式
--->事务回滚
--->事务管理与session关闭,数据库连接关闭
---JDBC:
/* * Connection con = getDConnection(); * con.setAutoCommit(false); * ... * con.commit(); * * con.rollback(); * */
---Hibernate:
链接:http://www.iteye.com/topic/177988
Hibernate 是JDBC 的轻量级封装,本身并不具备事务管理能力。在事务管理层,
Hibernate将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。
链接:http://www.iteye.com/problems/34922
链接:http://www.iteye.com/topic/100199
链接:http://www.iteye.com/problems/37132
链接:http://www.iteye.com/topic/78674(好)
链接:http://www.iteye.com/topic/515634(好)
http://justsee.iteye.com/blog/1071700
http://www.iteye.com/topic/177988
/** * * Session session = getSession(); * session.getTransaction().begin(); * ... * session.getTransaction().commit(); * * * session.getTransaction().rollback();//回滚 */
//手动处理事务 public void save(User user) { Session s = null; try { s = sessionFactory.getSession(); s.getTransaction().begin(); //...前面部分生成模版一 s.save(user); //调用业务逻辑方法 s.getTransaction().commit();//后面部分生成模版二... } catch (Exception e) { e.printStackTrace(); s.getTransaction().rollback();//回滚 } finalize(){ if(s != null{ s.close(); s = null; } } }
---Spring:
链接:http://lzh166.iteye.com/blog/1134146
链接:http://xuzhike.iteye.com/blog/849780
@Transactional
(属性???)
Spring 实现事务的注解@Transactional 是可以被继承的
---捕获异常后的事务处理:
链接:
http://a-bin.iteye.com/blog/1056839
http://blog.csdn.net/chs_jdmdr/article/details/8307848
http://www.jb51.net/article/32246.htm
在spring中如果某个业务方法被try {...}catch(){...},则这个业务方法也就等于脱离了spring事务的管理,因为没有任何异常会从业务方法中抛出!全被捕获并吞掉,导致spring异常抛出触发事务回滚策略失效。
Transactional的异常控制,默认是Check Exception不回滚,unCheck Exception回滚
声明式事务管理默认是针对unchecked exception回滚。也就是默认对RuntimeException()异常或是其子类进行事务回滚;checked异常,即Exception可try{}捕获的不会回滚.
如果使用try-catch捕获抛出的unchecked异常后没有在catch块中采用页面硬编码的方式使用spring api对事务做显式的回滚,则事务不会回滚,
在@Transaction注解中定义noRollbackFor和RollbackFor指定某种异常是否回滚。
@Transaction(noRollbackFor=RuntimeException.class)
@Transaction(RollbackFor=Exception.class)
这样就改变了默认的事务处理方式。
这就要求我们在自定义异常的时候,让自定义的异常继承自RuntimeException,这样抛出的时候才会被Spring默认的事务处理准确处理。