spring整合hibernate事务编程中错误分析
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事务编程中错误分析相关推荐
- 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题
解决在Spring整合Hibernate配置tx事务管理器出现错误的问题 参考文章: (1)解决在Spring整合Hibernate配置tx事务管理器出现错误的问题 (2)https://www.cn ...
- spring整合hibernate步骤及配置文件
spring整合hibernate,主要达到的目的有以下几点 1.使用Spring的IOC功能管理SessionFactory对象 --LocalSessionFactoryBean 对于Sessio ...
- Spring整合Hibernate步骤以及遇到的问题
spring整合Hibernate步骤以及遇到的问题 文章目录 spring整合Hibernate步骤以及遇到的问题 步骤: 创建实体类: 编写Dao层: 编写server层: spring配置文件 ...
- 【Spring】Spring系列6之Spring整合Hibernate
6.Spring整合Hibernate 6.1.准备工作 6.2.示例 com.xcloud.entities.book com.xcloud.dao.book com.xcloud.service. ...
- Spring4.x(9)--Spring的Hibernate事务-XML
Spring的Hibernate事务-XML 一.拷贝必要的jar包到工程的lib目录 二.创建spring的配置文件并导入约束 <?xml version="1.0" en ...
- Spring整合Hibernate 二 - 声明式的事务管理
Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: <bean id="txManager" class="o ...
- Spring整合Hibernate的步骤
为什么要整合Hibernate? 1.使用Spring的IOC功能管理SessionFactory对象 LocalSessionFactoryBean 2.使用Spring管理Session对象 ...
- Spring整合Hibernate图文步骤
工具:myeclipse9.0 Spring版本:2.5.6 Hibernate版本:3 昨天花了一下午时间把Spring和Hibernate整合到了一起,今天做一个笔记. 首先建立java Proj ...
- Spring整合Hibernate。。。。
环境搭建,在eclipse中导入spring和hibernate框架的插件,和导入所有使用到的架包 首先,hibernate的创建: 建立两个封装类,其中封装了数据库中表的属性,这儿只写属性,gett ...
最新文章
- spark RDD底层原理
- fastreport文本字数太多换行_Flutter实战】文本组件及五大案例
- python我的世界给予物品指令_我的世界指令给予物品 我的世界指令给予物品是多少...
- BZOJ 1211: [HNOI2004]树的计数 purfer序列
- 创新也要懂“规矩” 协同软件将走向何方
- C++引用与指针的比较
- Java-Runoob-高级教程-实例-数组:03. Java 实例 – 获取数组长度-*
- XE5 搭建DataSnap服务
- System.SetString - 获取字符串
- Java本地缓存技术选型(Guava Cache、Caffeine、Encache)
- win10修改dns服务器地址,教你Win10如何更改首选DNS服务器地址
- ps中怎么导出tif_TIF图片太大难以上传?
- 099 《少有人走的路:心智成熟的旅程》简记
- 机考[51 - 60]
- 基于Qt、FFMpeg的音视频播放器设计四(视频播放进度控制)
- 反向寻车管理系统服务器,一种反向寻车系统及寻车方法
- Redis中setex与setnx的区别?
- 1.1 电阻 RES Resistance
- vector erase操作
- 东莞爱维EVER总线步进电机驱动器profinet连接实例
热门文章
- [设计模式-结构型]代理模式(Proxy)
- Chrome无法打开文件的错误 [Not allowed to load local resource: file://XXXX]
- CSS 的导入方式 (link or import ?)
- java 代码压缩javascript_利用Java来压缩 JavaScript 代码详解
- linux加水印乱码,linux java程序加水印及中文乱码方案(二)
- jquery 监听返回事件
- ResourceBundle国际化
- linux 分配组命令,linux下一个用户如何分配给多个用户组?求命令,谢了。
- java pic 通信_dsPic33E:RS485通信问题
- ios开发 方形到圆的动画_3Blue1Brown 动画制作教程(1)--制作第一个自己的动画