2019独角兽企业重金招聘Python工程师标准>>>

在spring整合hibernate过程中,我们的配置文件:

<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
"><context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.spring"></context:component-scan>
<!-- <context:property-placeholder location="classpath*:properties/jdbc.property" /> -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath*:properties/jdbc.properties"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="SessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="annotatedClasses"><list><value>com.spring.model.User</value><value>com.spring.model.Log</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key=" hibernate.format_sql">true</prop></props></property></bean><!--利用Hibernate的事物,将sessionfactory注入 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="SessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
</beans>

利用Transactional 开启事务

@Transactionalpublic void add(User user) {if (userDAO == null||logDAO==null)System.out.println("erro");else {userDAO.add(user);logDAO.addLog(new Log());}}

调用代码

public class LogDAOImpl implements LogDAO {private SessionFactory sessionFactory;public SessionFactory getSessionFactory() {return sessionFactory;  }@Resourcepublic void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}/** 利用Spring——hibernate的事务bean管理事务,* 写了@Transaction相当于在方法之前加了beginTranscation* 后加了commit(),当然之前已经获取到session,* 不再需要获取session* @see com.spring.dao.LogDAO#addLog(com.spring.model.Log)*/@Overridepublic void addLog(Log log) {// TODO Auto-generated method stub// System.out.println("user added successful");Session session=sessionFactory.getCurrentSession();log.setMes("save success by transaction too long may be cancel");session.save(log);}
}

测试过程中总是报错:HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation

问题分析:

在spring中我们 通过配置文件,来获取Hibernate的 SessionFactory,并将这个sessionfactory放在txmanager这个bean中管理,

我们在addLog中没有开启事务,没有结束事务,这个就是spring通过AOP在我们的save逻辑之前和之后加了事务的逻辑方法。

我们知道AOP是通过动态代理(dynamc proxy)实现的,而dynamic prox又有两种实现方式:proxy,和cglib实现

proxy实现需要类实现接口,cglib实现是直接在修改二进制码

可以看出我这里是没有加cglib的jar包导致

转载于:https://my.oschina.net/u/942629/blog/192033

spring整合hibernate事务编程中错误分析相关推荐

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

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

  2. spring整合hibernate步骤及配置文件

    spring整合hibernate,主要达到的目的有以下几点 1.使用Spring的IOC功能管理SessionFactory对象 --LocalSessionFactoryBean 对于Sessio ...

  3. Spring整合Hibernate步骤以及遇到的问题

    spring整合Hibernate步骤以及遇到的问题 文章目录 spring整合Hibernate步骤以及遇到的问题 步骤: 创建实体类: 编写Dao层: 编写server层: spring配置文件 ...

  4. 【Spring】Spring系列6之Spring整合Hibernate

    6.Spring整合Hibernate 6.1.准备工作 6.2.示例 com.xcloud.entities.book com.xcloud.dao.book com.xcloud.service. ...

  5. Spring4.x(9)--Spring的Hibernate事务-XML

    Spring的Hibernate事务-XML 一.拷贝必要的jar包到工程的lib目录 二.创建spring的配置文件并导入约束 <?xml version="1.0" en ...

  6. Spring整合Hibernate 二 - 声明式的事务管理

    Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: <bean id="txManager" class="o ...

  7. Spring整合Hibernate的步骤

    为什么要整合Hibernate? 1.使用Spring的IOC功能管理SessionFactory对象  LocalSessionFactoryBean 2.使用Spring管理Session对象   ...

  8. Spring整合Hibernate图文步骤

    工具:myeclipse9.0 Spring版本:2.5.6 Hibernate版本:3 昨天花了一下午时间把Spring和Hibernate整合到了一起,今天做一个笔记. 首先建立java Proj ...

  9. Spring整合Hibernate。。。。

    环境搭建,在eclipse中导入spring和hibernate框架的插件,和导入所有使用到的架包 首先,hibernate的创建: 建立两个封装类,其中封装了数据库中表的属性,这儿只写属性,gett ...

最新文章

  1. spark RDD底层原理
  2. fastreport文本字数太多换行_Flutter实战】文本组件及五大案例
  3. python我的世界给予物品指令_我的世界指令给予物品 我的世界指令给予物品是多少...
  4. BZOJ 1211: [HNOI2004]树的计数 purfer序列
  5. 创新也要懂“规矩” 协同软件将走向何方
  6. C++引用与指针的比较
  7. Java-Runoob-高级教程-实例-数组:03. Java 实例 – 获取数组长度-*
  8. XE5 搭建DataSnap服务
  9. System.SetString - 获取字符串
  10. Java本地缓存技术选型(Guava Cache、Caffeine、Encache)
  11. win10修改dns服务器地址,教你Win10如何更改首选DNS服务器地址
  12. ps中怎么导出tif_TIF图片太大难以上传?
  13. 099 《少有人走的路:心智成熟的旅程》简记
  14. 机考[51 - 60]
  15. 基于Qt、FFMpeg的音视频播放器设计四(视频播放进度控制)
  16. 反向寻车管理系统服务器,一种反向寻车系统及寻车方法
  17. Redis中setex与setnx的区别?
  18. 1.1 电阻 RES Resistance
  19. vector erase操作
  20. 东莞爱维EVER总线步进电机驱动器profinet连接实例

热门文章

  1. [设计模式-结构型]代理模式(Proxy)
  2. Chrome无法打开文件的错误 [Not allowed to load local resource: file://XXXX]
  3. CSS 的导入方式 (link or import ?)
  4. java 代码压缩javascript_利用Java来压缩 JavaScript 代码详解
  5. linux加水印乱码,linux java程序加水印及中文乱码方案(二)
  6. jquery 监听返回事件
  7. ResourceBundle国际化
  8. linux 分配组命令,linux下一个用户如何分配给多个用户组?求命令,谢了。
  9. java pic 通信_dsPic33E:RS485通信问题
  10. ios开发 方形到圆的动画_3Blue1Brown 动画制作教程(1)--制作第一个自己的动画