我在服务方法中使用@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"/>
答案 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)
通过代理调用方法将有助于解决此问题。 从同一类中调用相同的方法将无助于事务处理。