今天弄了一天的hibernate添加事务的问题

首先,建立的是一个java工程,把hibernate添加进工程里,很容易就可以写一个增删改查的方法。索性就多加点东西,把接口,抽象类也加到里面,自己看着也舒服点,然后写的时候了,想把spring的功能加进来,想利用spring的aop配置事务,做到事务层配置可控制到service层,这样的话,就可以专注业务实现,一个业务方法就是一个事务。

首先看配置好的application.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
       ">

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    </bean>

<bean id="iStudentDAO" class="com.wxw.model.StudentDAO">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
   
   
    <bean id="studentServiceImpl" class="com.wxw.service.StudentServiceImpl">
        <property name="iStudentDao" ref="iStudentDAO"></property>
    </bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

<!-- 事务控制在service层 -->
     <aop:config>
         <aop:pointcut id="interceptorPointCuts" expression="execution(* com.wxw.service.*.*(..))" />
         <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />       
     </aop:config>

</beans>

注意点:

  • 自己定义的bean一定要是接口的形式,为什么了,因为spring的配置针对的接口,如果bean配置的实体类,会出现异常
  1. 自己定义的bean也不能是abstract类,否则一样是报错。也不能在abstract类里注入接口等一些操作了
  2. 添加spring aop需要添加对应的jar包外,还需要在xml头部加一些xsd信息,否则编译器会报错,这个是常识性的问题,但却很隐蔽,还有别把头信息版本搞错了,虽然有时候3.0和3.1的版本中有细微的差别,一旦出问题,那可是致命的,找都无法找。
  3. 定义aop:config里的expression的信息时,一定要写对execution()这里面的表达式,这个是有讲究的,自己好好注意一下
  4. 然后是sessionFactory的问题,只能定义一个sessionFactory,别初始化一次,然后又注入一次,两个不同的session事务就不执行了,我测试了一下,确实是不能成功,都生成了sql语句了,但是事务却没有提交成功,而且执行起来,两条sql时间间格差很多,有2秒钟左右,我写的保存语句就是连着写的,本来应该是同一时间出现的。所以,这点也要有明确的思维
  5. 然后就是保存时候的问题,自己加transation加在代码里,能够提交成功,但配置的事务就是没起作用,肯定是配置写的不对,仔细检查。然后就是一直报save is not valid without active transaction这个错误,我试了好多办法,终于在一个论坛找到了,把hibernate.cxf.xml文件里的一个<property name="hibernate.current_session_context_class">thread</property>注释掉便可,前提是你其他的方的配置写正确了。这个地方原来是hibernate原因网上说的是跟spring接管事务的起冲突了,按照我的理解就是spring接管了hibernate的所有数据访问配置
  6. 事务对RuntimeException默认是会回滚的,而且还不能把这个异常用try捕获,否则事务先提交的一样会成功,后提交的也一样会成功,只有throw了之后就事务就会回滚
  7. 最后的最重要的一点就是,遇到错误不要慌,虽然我也花了整整一天时间,最少有7-8个小时才把这个问题解决,一定要沉住气,哪里出错,先想想,一些明显的错误,上网一查,基本上都能解决,有些问题肯定是你需要花时间去想的,好了,问题解决,花了这么多时间,难得,感觉不错!

转载于:https://www.cnblogs.com/wxwall/p/3176809.html

hibernate添加spring 事务管理注意问题记录相关推荐

  1. 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题

    解决在Spring整合Hibernate配置tx事务管理器出现错误的问题 参考文章: (1)解决在Spring整合Hibernate配置tx事务管理器出现错误的问题 (2)https://www.cn ...

  2. Spring事务管理 与 SpringAOP

    1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略.  ...

  3. Spring 事务管理高级应用难点剖析

    Spring 事务管理高级应用难点剖析: 第 1 部分 http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts1/index.html htt ...

  4. Spring 事务管理高级应用难点剖析--转

    第 1 部分 http://www.ibm.com/search/csass/search/?q=%E4%BA%8B%E5%8A%A1&sn=dw&lang=zh&cc=CN& ...

  5. Spring事务管理(详解+实例)

    写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...

  6. spring入门到放弃——spring事务管理

    Spring事务提供了两种管理的的方式:编程式事务和声明式事务 简单回顾下事务: 事务:逻辑上的一组操作,组成操作的各个单元,要么全部成功,要么全部失败. 事务特性: 原子性:一个事务包含的各个操作单 ...

  7. Spring事务管理 1

    Spring事务管理             博客分类:Spring Spring配置管理DAOXMLBean 事务的ACID特性: Atomic 原子性:Consistency 一致性:Isolat ...

  8. Spring进阶(五):Spring事务管理(详解+实例)

    文章目录 一.前言 二.核心接口 2.1 事务管理器 2.1.1 JDBC事务 2.1.2 Hibernate事务 2.1.3 Java持久化API事务(JPA) 2.1.4 Java原生API事务 ...

  9. Spring 事务管理机制概述

    摘要: 一般地,用户的每次请求都对应一个业务逻辑方法,而一个业务逻辑方法往往包括一系列数据库原子访问操作,并且这些数据库原子访问操作应该绑定成一个事务来执行.然而,在使用传统的事务编程策略时,程序代码 ...

最新文章

  1. 亚马逊科学家Nikko Ström:将人工智能助理日常化的梦想照进现实
  2. 卓越软件工程--《微软360度》读后感
  3. UA SIE545 优化理论基础4 对偶理论简介1 松弛问题与Lagrange对偶
  4. 企业实战(Jenkins+GitLab+SonarQube)_10_Jenkins通过Depoly插件热部署Java程序
  5. 经典面试题(26):以下代码将输出的结果是什么?
  6. 深度学习《CGAN新认识》
  7. CS224n研究热点5 图像对话
  8. 【2000*】【Codeforces Round #518 (Div. 1) [Thanks, Mail.Ru!] B】Multihedgehog
  9. 删除需要TrustedInstaller权限的文件
  10. c语言 uint16_t,c中数据类型uint16_t,uint32_t,uint64_t输入输出使用方法
  11. 尼古拉特斯拉 名言_尼古拉清洁技术的表面魅力
  12. color-thief-php提取图片色值分布及百分占比
  13. ansible meta目录
  14. 怎么恢复永久删除的文件
  15. ipad html文件,ipad HTML文件怎么打开
  16. LoadRunner Error -27792: Failed to connect to server
  17. 今天吃什么随机网页_今天吃什么?周末教你做衢州鸭头,便宜、干净又美味
  18. Java实现数据库连接的五种方法
  19. ios上架被拒5.1.1
  20. AC. Anu Has a Function

热门文章

  1. 永磁直驱风力发电机结构图_风机越来越大,国内首台10兆瓦海上风力发电机研制成功...
  2. 几何画板200个经典课件_动态几何画板 Geogebra
  3. python怎么用for循环找出最大值_在for循环Python中查找前10个最大值
  4. mysql 5.7变化_从MySQL 5.5到5.7看复制的演进
  5. jvm内存参数配置_idea中设置JVM参数,简单理解JVM常见参数,JVM调优简单入门
  6. mac终端连接linux中断,Mac电脑iTerm2链接Linux服务器断线解决方案
  7. linux如何执行平台,如何在Linux平台运行HelloWorld及测试项目
  8. python的两种循环结构_python分支和循环结构
  9. 这门国产编程语言,确实很棒!
  10. 太牛了!芯片级拆解世界第一颗FPGA芯片!