服务层的@Transaction在春天不在DAO层上工作

时间:2016-02-12 13:47:32

标签: spring hibernate

我在服务方法中使用@Transactional(org.springframework.transaction.annotation),我从这里调用DAO层来从DB中获取数据。

但是,我收到了以下错误

org.hibernate.HibernateException: No Session found for current thread

sessionFactory.getCurrentSession()

我已根据其他帖子的建议将包扫描添加到不同的文件中。仍然无法收到错误。

请帮忙。提前一百万。

以下是我使用的文件。

的applicationContext.xml

<mvc:annotation-driven />
    <context:annotation-config/>
    <context:component-scan base-package="com.BASE_PCKG"></context:component-scan>

弹簧servlet.xml中

<mvc:annotation-driven />
    <context:component-scan base-package="com.BASE_PCKG.SUB_PCKG.web"></context:component-scan>

Web.xml中

...
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/applicationContext.xml</param-value>
    </context-param>
....
<servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

此外,我已将applicationContext文件中的事务管理器配置为:

<bean id="txManager"          class="org.springframework.orm.hibernate4.HibernateTransactionManager" primary="true">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <tx:annotation-driven transaction-manager="txManager"/>

2 个答案:

答案 0 :(得分:0)

在daoImpl类上添加@Transactional并在配置文件中添加事务管理器:

<tx:annotation-driven/> 

<bean id="transactionManager" 
 class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

答案 1 :(得分:-1)

通过代理调用方法将有助于解决此问题。 从同一类中调用相同的方法将无助于事务处理。