现在的位置: 首页 > 综合 > 正文

持久层几种事务处理的方式

2017年12月27日 ⁄ 综合 ⁄ 共 1899字 ⁄ 字号 评论关闭

--->事务管理与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默认的事务处理准确处理。

抱歉!评论已关闭.