总结xml配置spring-aop声明式事务配置与hibernate报错:** isno active spring和hibernate整合,原因会话工厂去路(到spring不仅仅是bean)错误

spring事务管理太厉害了!!可以不再自管事务开发了!

spring aop声明式事务配置 问题:
困扰我近十多天的的spring事务管理终于解决了,
再也不用自己管理事务了
嗯,可以删该死的hibernate事务管理代码了
分享一下
配置spring aop声明式事务配置 访问action时hibernate报错
*********is not valid without active transaction

这里星号是某个类
的某有事务体现方法

我曾经尝试了配置4次spring-aop声明式事务,每次都是好几个小时,每次最终我都放弃了,现在问题解决了,
我才发现,其实我离配置成功只差一步:就是
在hibernate.cfg.xml
对hibernate框架的有一句配置:
的会话工厂声明的配置

	<property name="hibernate.current_session_context_class">thread</property>

当然,这在这里是一个错误示范。单独使用hibernate,是正确的

但如果你想整合spring与hibernate的话,就必须改变他

不然就报以上错误。

正确格式(hibernate5):

	<property name="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</property>

原因是:
两者会话工厂的,一开始没整合,只有hibernate自然,使用原生配置是没有问题的,
但是一旦与spring框架整合就会有不少问题,
因为这样整合,其实实际上仍然是hibernate再管理事务,spring也只是帮助注入了会话工厂的bean罢了。并没有
发挥出她的事务管理特性,那太可惜了
因为你仍然要自己使用hibernate管理事务。
但改了会话去路.current_session_context_class为 : org.springframework.orm.hibernate5.SpringSessionContext就将会话工厂完完全全交给spring了
千万记住,这是一个大坑,只在spring里配置的话也要注意这个属性

这样就好了,当然,也有可能在你的application.xml有其它基础配置错误,那么我再给出springaop的具体配置hibernate的过程

application.xml

注意导入相应spring包,如tx,aop等
aop包:aspectj系列切面必需包,,aop包依赖aspectj

大局的话采用一个bean一个代理会话的配置

<!--   头缺beans且注意导入相应spring包--->
<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:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.5.xsd">
<!-- 注入会话工厂 我使用的是配置文件导入会话工厂 -->
	<!-- HibernateDaoSupport对dao支持类继承 -->
	<bean id="SessionFactory"
		class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<property name="configLocation"
			value="classpath:hibernate.cfg.xml" />
	</bean>
<!-- spring-aop -->
 <!-- 定义事务管理器 -->    
    <bean id="transactionManager"  
        class="org.springframework.orm.hibernate5.HibernateTransactionManager">  
        <property name="sessionFactory" ref="SessionFactory" />  
    </bean>  
    <!-- 定义事务 -->  
    <tx:advice id="txAdvice" transaction-manager="transactionManager">  
        <tx:attributes>  
            <tx:method name="select*" propagation="REQUIRED" />  
        </tx:attributes>  
    </tx:advice>  
    <!-- 定义切面 -->  
    <aop:config>  
        <aop:pointcut id="PointCuts" expression="execution(* com.j.daoimpl.*.*(..))" />  
        <aop:advisor advice-ref="txAdvice" pointcut-ref="PointCuts" />  
    </aop:config> 

配置完毕!!!

再来一波,spring真是好框架!

感谢博主maoyuanming0806,他的博文让我对spring配置的流程更少的盲点,一语惊醒梦中人!!!
并给出原文链接:

https://blog.csdn.net/maoyuanming0806/article/details/61417995

发布了42 篇原创文章 · 获赞 1 · 访问量 4199
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览