`

spring注解的事务不开启

阅读更多
<context:annotation-config /> 
    <context:component-scan base-package="com.shopping" /> 
    <!-- 采用注解形式的声明式事务管理 --> 
    <tx:annotation-driven transaction-manager="txManager"/> 
 
    <!-- 基于hibernate注解的sessionFactory --> 
    <bean id="sessionFactory" 
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
        <property name="configLocation" value="classpath:hibernate.cfg.xml"> 
        </property> 
    </bean> 
    <!-- 基于hibernate的事务管理器 --> 
    <bean id="txManager" 
        class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
        <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
 
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
        <property name="sessionFactory" ref="sessionFactory"></property> 
    </bean> 


这是applicationContext.xml的配置,但我在Service调用hibernateTemplate.getSessionFactory().getCurrentSession().createQuery("from Person");
这个方法的时候就报:org.hibernate.HibernateException: createQuery is not valid without active transaction
说事务没开启,但是我在方法上配置了@Transactional,@Transactional这个注解不会帮开事务的吗?

然后我用手动管理事务又OK了,不报错
                hibernateTemplate.getSessionFactory().getCurrentSession().beginTransaction();
hibernateTemplate.getSessionFactory().getCurrentSession().createQuery("from Person");
hibernateTemplate.getSessionFactory().getCurrentSession().getTransaction().commit();


这个问题很经典了
在住容器中,将Controller的注解排除掉
<context:component-scan base-package="com">
  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

而在servlet的spring配置文件中将server给去掉
<context:component-scan base-package="com">
  <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
  </context:component-scan>

应为spring的context是父子容器,所以会产生冲突

如果这样还不对那就是其他问题了 呵呵 祝你好运
分享到:
评论

相关推荐

    spring 注解事务管理

    以下是对"spring注解事务管理"这一主题的详细解释。 ### 1. Spring事务管理的基本概念 Spring事务管理主要分为两种方式:编程式事务管理和声明式事务管理。编程式事务管理是通过编写代码来控制事务的开始、提交、...

    SpringJDBC注解事务.zip

    通过上述内容,我们可以看到Spring JDBC结合注解事务管理,极大地简化了事务控制,让开发更高效,同时也保持了代码的整洁性。在实际项目中,结合Spring的AOP(面向切面编程)和IoC(依赖注入)特性,事务管理变得...

    spring注解式事务

    "spring注解式事务" Spring框架提供了基于注解的方式来管理事务,使用@Transactional注解来标记需要事务管理的方法。该注解可以被应用于public方法上,对于非public方法,如果标记了@Transactional也不会报错,但...

    Spring注解开发,事务控制

    本文将深入探讨Spring注解开发中的事务控制,以及如何通过注解实现事务管理。 首先,让我们理解“注解”在Spring中的角色。注解是一种元数据,允许我们在代码中嵌入信息,这些信息可以被编译器或运行时环境读取。在...

    dwr+spring 注解方式

    1. **Spring注解配置**: - `@Configuration`:标记一个类为Spring配置类,可替代传统的XML配置。 - `@ComponentScan`:用于扫描指定包下的所有@Component及其子注解(如@Service、@Repository、@Controller)的类...

    springmvc+mybatis+spring注解

    3. **Spring注解**:Spring框架提供了丰富的注解,如@Service、@Autowired、@Transactional等,使得依赖注入和事务管理更加便捷。@Service注解用于标记服务层类,@Autowired自动装配依赖,可以减少XML配置文件。@...

    Spring 注解学习手札(一) 构建简单Web应用

    在本篇《Spring注解学习手札(一)构建简单Web应用》中,我们将深入探讨如何使用Spring框架的注解来构建一个基本的Web应用程序。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛应用。它简化了依赖注入、...

    使用Spring的声明式事务----Annotation注解方式

    在Spring框架中,声明式事务管理是其核心特性之一,它允许开发者无需手动处理事务的开始、提交、回滚等操作,而是通过配置或者注解的方式进行声明,从而简化了事务管理的复杂性。本篇文章将深入探讨如何使用Spring的...

    Spring事务管理Demo

    2. **声明式事务管理**:这是Spring最常用的方式,通过在配置文件或者使用`@Transactional`注解来定义事务边界,使得事务管理与业务逻辑分离,降低了代码的耦合度。`@Transactional`注解可以应用于方法级别,表示该...

    spring3 struts2 Mybatis3 组件注解 事务注解 实例

    在业务逻辑层,你可以定义一个Service类,使用`@Service`注解标记,并在方法上使用`@Transactional`开启事务。Service类中调用DAO层的方法,DAO层使用Mybatis3的注解执行SQL操作。这样,当整个业务流程完成后,如果...

    spring事务与数据库操作

    Spring的声明式事务管理是通过配置文件或注解的方式来实现的。这种方式将业务逻辑与事务管理代码分离,使得代码更加清晰且易于维护。 ##### 1.2 配置Spring声明式事务 要启用Spring的声明式事务管理,通常需要做...

    Spring事务流程图

    1. **开启事务**:在业务方法执行前,Spring会检查是否有事务注解(如@Transactional),如果有,就会开启一个新的事务。 2. **执行业务逻辑**:在事务内执行所有的数据库操作,如增删改查等。 3. **提交或回滚...

    spring aop注解版

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理等。在本主题中,我们将深入探讨Spring AOP的注解版,它是基于Java注解的...

    spring3hibernate4注解式事务管理

    这个注解可以放在服务层(Service Layer)的方法上,指示Spring在执行该方法时开启一个事务,并在方法执行完毕后根据事务的执行情况决定是否提交或回滚。 ```java @Service public class UserService { @Autowired...

    spring基于注解实现事务

    - 当@Transactional注解的方法被调用时,Spring会检查当前是否存在事务,如果不存在,则根据propagation属性创建新事务。方法执行过程中,如果发生异常,Spring会自动回滚事务,否则在方法结束时提交事务。 3. **...

    spring声明事务的配置

    Spring的声明式事务管理基于其面向切面编程(AOP)框架实现,事务管理器会拦截事务方法的调用,根据配置的事务属性自动进行事务的开启、提交、回滚等操作。 7. **Spring 2.x及更高版本的改进** 随着Spring的发展,...

    Spring 整合mybatis(注解&xml版声明式事务).pdf

    在Spring配置文件中开启注解事务,通常通过标注@Transactional注解实现;或者在XML文件中进行配置。 整合后的操作流程大致如下: - 首先,Spring框架启动时会读取配置信息,加载并初始化数据源、SqlSessionFactory...

    spring mvc+ibatis+spring注解

    总之,这个项目展示了如何结合Spring MVC、Ibatis以及Spring注解,构建一个完整的Web应用程序,实现了数据的CRUD操作,以及分页排序查询和用户登录验证等功能,所有这些都基于非XML的配置方式,利用注解提高了开发...

    spring学习事务源码

    3. **TransactionStatus**: 代表当前事务的状态,包含是否新开启事务、是否可以回滚等信息。 4. **TransactionInterceptor**: 是AOP事务管理的核心,它会在方法执行前后自动调用事务管理的相关操作。 声明式事务...

    Spring 注解学习手札(五) 业务层事务处理

    这篇“Spring注解学习手札(五)——业务层事务处理”深入探讨了如何使用注解来管理应用程序中的事务,确保数据的一致性和完整性。Spring提供了声明式事务管理,使得开发者无需编写繁琐的事务控制代码,只需在方法上...

Global site tag (gtag.js) - Google Analytics