@Transactional的用法

来源:互联网 发布:搜谱网 心事谁人知 编辑:程序博客网 时间:2024/06/05 08:40
package com.zb.service;import java.util.List;//在service类前加上@Transactional,//声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。//因此sessionFactory.getCurrentSession()在这里不报错no-Transaction错//。import javax.annotation.Resource;import org.hibernate.SessionFactory;import org.springframework.transaction.annotation.Transactional;//在service类前加上@Transactional,//声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。//因此sessionFactory.getCurrentSession()在这里不报错//之所以action中不需要@Transactional,因为action不会去调用得带session的方法,所以不需要事务管理@Transactionalpublic class testService {private SessionFactory sessionFactory;public SessionFactory getSessionFactory() {return sessionFactory;}    @Resourcepublic void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}    public List getList(){    return  sessionFactory.getCurrentSession().createQuery("from City c").list();      }}//之说以action中不需要@Transactional,因为action不会去调用得带session的方法,所以不需要事务管理,所以类前不用加//@Transactional,package com.zb.web.action;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import org.springframework.transaction.annotation.Transactional;import com.opensymphony.xwork2.ActionSupport;import com.zb.service.testService;@Transactionalpublic class testAction extends ActionSupport {    private testService  testService;    //有时会报空指针异常  //  private HttpServletRequest request = ServletActionContext.getRequest();     public testService getTestService() {return testService;}    @Resourcepublic void setTestService(testService testService) {this.testService = testService;}public String execute() throws Exception {List list =testService.getList();System.out.println(list.size()); HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("list", list);  return SUCCESS;}}
一般类上这么写@Transactional(readOnly=true) //配置事务 查询使用 只读public Demo{        //方法的写法 (增删改要写 ReadOnly=false 为可写)        @Transactional (propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=false)         public void saveUser(){        } }Propagation.REQUIRED :有事务就处于当前事务中,没事务就创建一个事务isolation=Isolation.DEFAULT:事务数据库的默认隔离级别readOnly=false:可写 针对 增删改操作 注意:方法的@Transactional会覆盖类上面声明的事务