`
wang_zhi_peng2007
  • 浏览: 242296 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring怎么在service控制事务

 
阅读更多

Spring如何在service控制事务?
   有2个Dao

UserDaoImpl:
public void saveUser(User user) {
   this.getHibernateTemplate().save(user);
   }

AcclDaoImpl:
public void saveAccl(Accl accl) {
   this.getHibernateTemplate().save(accl);
   }

Service层
UserServiceImpl:
private IUserDao userDao;
private IAcclDao acclDao;
public void saveUser(User user, Accl accl) {
   this.userDao.saveUser(user);
   this.acclDao.saveAccl(accl);
 }

 

applicationContext.xml:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="configLocation">
   <value>classpath:hibernate.cfg.xml</value>
   </property>
   </bean>
   <!--定义事务管理器-->
   <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory">
   <ref bean="sessionFactory"/>
   </property>
   </bean>
   <tx:advice id="smAdvice" transaction-manager="transactionManager">
   <tx:attributes>
   <tx:method name="save*" propagation="REQUIRED"/>
   <tx:method name="del*" propagation="REQUIRED"/>
   <tx:method name="update*" propagation="REQUIRED"/>
   </tx:attributes>
   </tx:advice>
   <aop:config>
   <aop:pointcut id="smMethod" expression="execution(* mm.s2sh.service.*.*(..))"/>
   <aop:advisor pointcut-ref="smMethod" advice-ref="smAdvice"/>
   </aop:config>

   <bean id="userAction" class="mm.s2sh.action.user.UserAction">
   <property name="userService" ref="userService"></property>
   </bean>
   <bean id="userService" class="mm.s2sh.service.user.impl.UserServiceImpl">
   <property name="userDao" ref="userDao"></property>
   <property name="acclDao" ref="acclDao"></property>
   </bean>
   <bean id="userDao" class="mm.s2sh.dao.user.impl.UserDaoImpl">
   <property name="sessionFactory" ref="sessionFactory"></property>
   </bean>
   <bean id="acclDao" class="mm.s2sh.dao.user.impl.AcclDaoImpl">
   <property name="sessionFactory" ref="sessionFactory"></property>
   </bean>

  提交的时候发现数据没有进入数据库
  于是在Dao中save完后this.getSession().beginTransaction().commit();
  Accl表中有个字段是unique的,我故意提交了一个已有数据,结果导致User表中插入一条数据,也就是说没有回滚
   我感觉不应该用this.getSession().beginTransaction().commit();但是不用的话事务又没有提交进不了数据库
请问这个应该怎么弄才能做到正确回滚?

 

 

----------------解决方案--------------------

在service层加上这句话
@Transactional(readOnly = false)
有2个Dao
UserDaoImpl:
@Transactional(readOnly = false)
public void saveUser(User user) {
 this.getHibernateTemplate().save(user);
 }
AcclDaoImpl:
@Transactional(readOnly = false)
public void saveAccl(Accl accl) {
 this.getHibernateTemplate().save(accl);
 }

 

 

分享到:
评论

相关推荐

    spring框架事务控制

    springMVC框架事务控制,保证业务操作的完整性 防止在一些意外(例如说突然断电)的情况下出现乱数据,防止数据库数据出现问题。 如:银行转帐。A账户减少的钱要加到B账户上,若A这边减了钱,B那边却还是一样的数,这...

    Spring自定义切面事务问题

    需要使用Spring切面,同时需要保证事务正常。可使用文档中的方法。一般情况,若不做特殊处理。使用切面,事务将会失效。

    spring框架手动提交事务,jdbctample

    注意:只是jdbc自带的jdbctample,不能 用于整合mybatis框架的事务,我整合了,事务不起作用!!!! 按老师的说法是基于xml方式,但不准确,因为也用到了注解 &lt;aop:aspectj-autoproxy proxy-target-class="true"&gt;...

    Synchronized锁在Spring事务管理下线程不安全

    Synchronized锁在Spring事务管理下,导致线程不安全。

    spring五种事务配置demo

    本例所有的事务放在service层进行管理,方法中间抛出运行时异常以测试是否回滚 Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,...

    Spring事务优缺点及使用详解.docx

    事务简介 二、程序举例环境搭建 o1. 创建数据表 ...三、使用 Spring 的事务注解管理事务 o1. 声明事务管理器 o2. 开启注解驱动 o3. 完整Spring配置文件 o4. 业务层 public 方法加入事务属性 o5. 测试

    Spring+Mybatis整合事务回滚

    花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    今天修改了 applicationContext.xml,以后的事务控制就万事大吉了,里面有详细注释哦。 有什么问题可以给我留言 ^_^,大家一起进步! &lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ...

    基于SpringBoot + SpringCloud+ElasticSear的在线教育管理系统+MySQL、MongoDB

    业务层:Spring IOC、Aop事务控制、Spring Task任务调度、Feign、Ribbon、Spring AMQP、Spring Data Redis等。 控制层:Spring MVC、FastJSON、RestTemplate、Spring Security Oauth2+JWT等 微服务治理:Eureka、...

    spring_day01_all.zip_Action!_ioc mechanism_service调用dao

    在SSH整合开发中,利用Spring管理Service、DAO等组件,利用IoC机制实现Action和Service,Service和DAO之间低耦合调用。利用AoP机制实现事务管理、以及共通功能的切入等。 功能是整合,好处是解耦。

    高级开发spring面试题和答案.pdf

    面试高级开发的期间整理的面试题目,记录我面试遇到过的...Spring的事务是如何回滚的,实现原理; 抽象类和接口的区别,什么时候用抽象类什么时候用接口; StringBuilder和StringBuffer的区别 java值传递和引用传递

    Spring2.52 开发手册

    Spring为编写企业应用程序提供了轻量的解决方案,同时仍然支持使用声明式事务、 用RMI或web service远程调用、以及使用多种方式来将数据持久化到数据库。Spring提供了全功能的 MVC framework, 以及透明集成AOP到你...

    spring-控制事物

    NULL 博文链接:https://sunfish.iteye.com/blog/1534888

    spring in action英文版

     6.6.2 在Spring里置入一个Web Service  6.7 小结  第7章 访问企业服务  7.1 从JNDI中获取对象  7.1.1 使用传统的JNDI  7.1.2 代理JNDI对象  7.2 发送电子邮件  7.3 调度任务  7.3.1 使用...

    SpringColud1简易分布式

    SpringColud1简易分布式 ● cloud-config-server:配置服务器-(通过git获取配置) ● cloud-eureka-server:eureka注册服务器 ● cloud-simple-service:一个使用mybatis的数据库应用,服务端 ● cloud-simple-...

    Spring中文帮助文档

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于...

    spring.net中文手册在线版

    23.3.Spring.Services.WindowsService.Process.exe应用程序 23.3.1.安装 23.3.2.配置 23.4.将应用程序上下文发布为Windows服务 23.4.1.service.config 23.4.1.1.让应用程序了解自身的位置 23.4.2.watcher.xml - 可选...

    Spring API

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于...

    Spring.html

    控制反转:把创建对象的权利交给Spring 创建对象 1.无参构造 2.静态工厂 3.实例工厂 管理对象 对象关系DI 构造器注入 set注入 生命周期 scope:prototype/singleton init-method destroy-...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能...附录B 在Spring中开发Web Service

Global site tag (gtag.js) - Google Analytics