关于 Spring,hibernate4 整合及事务配置 在此不一一赘述了,详情猛击http://sishuok.com/forum/blogPost/list/2508.html。
hibernate4 事务回滚测试:
<tx:advice id="……" transaction-manager="……">
<tx:attributes>
<tx:method name="……"
propagation=" REQUIRED"
isolation="READ_COMMITTED"
timeout="-1"
read-only="false"
no-rollback-for=""
rollback-for=""/>
……
</tx:attributes>
</tx:advice>
rollback-for:需要触发回滚的异常定义,以“,”分割,默认任何RuntimeException 将导致事务回滚,而任何Checked Exception 将不导致事务回滚;
Controller层 代码
@RequestMapping(value="/userNameCheck",method=RequestMethod.GET)
@ResponseBody
public String checkName(@RequestParam("username") String username){
Buyer b = new Buyer();
b.setUsername(username);
b.setPassword("abc");
b.setEmail(username+"@163.com");
//人为抛出RuntimeException 测试
buyerService.saveTest(b);
}
Service层 代码
//@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED,rollbackFor=RuntimeException.class)
public void saveTest(Buyer buyer){
getSession().save(buyer);
getCount();
}
Dao层 代码
public Session getSession(){
//获取session 事务必须是"Required"
return sessionFactory.getCurrentSession();
}
@SuppressWarnings("unchecked")
public void save(M model){
getSession().save(model);
}
public Long getCount()throws RuntimeException{
throw new RuntimeException("test");
}