Spring + Hibernate迁移 - currentSession()方法抛出异常

时间:2016-10-17 10:36:31

标签: spring hibernate spring-4 hibernate-4.x

我已将Spring从3.1迁移到4.1.3,将Hibernate 3.2迁移到4.3.9

作为迁移的一部分,我修改了以下导入和代码

旧导入

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

新导入

import org.springframework.orm.hibernate4.support.HibernateDaoSupport;

和代码更改

在hibernate 3中,我有以下代码

public Session getCurrentSession() {
    Session session = getSession();
    session.setFlushMode(FlushMode.MANUAL);
    return session;
}

现在我根据下面的新罐子进行了修改

public Session getCurrentSession() {
    Session session = currentSession();
    session.setFlushMode(FlushMode.MANUAL);
    return session;
    }

在上述变化之后,我正处于异常

之下
    Could not obtain transaction-synchronized Session for current thread
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
    at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134)
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)
    at org.springframework.orm.hibernate4.support.HibernateDaoSupport.currentSession(HibernateDaoSupport.java:129)

我没有在我的应用程序中使用注释

我无法解决此问题。请帮助我了解异常的可能原因

1 个答案:

答案 0 :(得分:1)

我猜您需要为transactionManager添加sesssionFactory

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

其中,mySessionFactory是您的会话工厂Bean ID。

正如您所说,您没有在项目中使用Annotations。然后,您必须使用AOP在方法级别启用事务管理。

<tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
    <tx:method name="select*"  read-only="true" />
    <tx:method name="*" />
  </tx:attributes>
</tx:advice>
<aop:config>
  <aop:pointcut id="txPointcut" expression="execution(* example.MyClass.*(..))" />
  <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>

为您的方法添加交易支持。

在POM中添加以下条目,如果您使用的是MAVEN或gradle,或者只需下载并将jar添加到类路径中即可。

<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.3.3.RELEASE</version>
</dependency>