spring 管理事务配置时,结果 报错: No Hibernate Session bound to thread, and configuration does not allow creatio

java.lang.IllegalStateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here这个异常java

这个错误,网上说的缘由一大推,反正我这个出的问题 是由于 虽然我在 spring 里把事务都配置好了,结果运行就出现这个错误,看看配置都没什么问题,都是网上 案例 照 写编码的,仍是错的,结果发现是由于 我 在拿 spring 中 的 service 或 dao bean 时 拿的方式错了。spring

  

FooService fooService = ctx.getBean("xxxxDao",FooService.class); 
//不能直接中bean中拿目标代理对象,而是从事务bean中去拿目标代理对象,这样拿到的代理才有spring 事务管理
//FooService fooService = (FooService) ctx.getBean("fooService");

---》 如上边 spring 中是对 FooService 接口 的 子类 xxxFooService 进行 事务管理,原来习惯直接
FooService fooService = (FooService) ctx.getBean("fooService"); -- fooService 为spring中的bean

其实错的,拿到的虽然也是 子类 xxxFooService 的bean ,可是这个 bean是没有 spring 事务管理的,那怎么才能拿到有spring 管理的bean呢,即

FooService fooService = ctx.getBean("xxxxDao",FooService.class); -- 这个 xxxxDao 为
TransactionProxyFactoryBean 的bean 或 是其 子类 bean(当其为abstract时必须拿其子类bean)
上边第一个参数 为 事务bean ,第二个参数 为咱们想要 的 代理目标对象(必须用接口类,不可用具体实现类),这样拿到的 service 才有 spring 事务管理,改正后上边的报错就不会出现了。

注: 上边的这个报错问题通常都是 没有spring 事务管理才会报的错,因此遇到这种问题先看看本身spring配置的事务 是否有问题,再看看本身拿的事务管理对象bean 的拿 法 是否有问题,上边例子中就是配置没问题,拿法有问题,
   诸如还有其余的一些问题 能形成上边的错误,但 其余的问题都 是要么配置错误要么拿 bean方式错误。再举例:假如 用拦截器 进行事务管理配置,假如 :
    
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <!--一切 和 *Service 有关的都会被拦截-->
                <value>DefaultFooService</value>
                <!--<value>*Service</value>-->
            </list>
        </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
            </list>
        </property>
    </bean>
如上边拦截 位置 应该是 拦截 全部对象 名 带有Service的类,假如 要事务管理的对象 在spring 中 bean 的名字 叫xxx 那此就不会 被拦截,那最终就不会有事务管理,那也会报上边的错误。那由于 要事务管理的对象在spring中bean id 叫 xxx ,那 此配置  *xxx  或 直接就 xxx  就能正常 拦截了。就不会报上边错误了。同理就是说明一个问题 ,只要 要spring 事务 管理的 bean 对象  被 拿取到时,再进行 操做时若是 这个对象自己不在 事务管理中的 话就会报上边的问题。这个对象怎么会没有事务管理,要么 配置错误,要么拿这个bean 对象 时错误。
相关文章
相关标签/搜索