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

Spring + Hibernate migration - currentSession() method throwing exception

我已将 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;

和代码更改

在休眠 3 中我有以下代码

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

现在我已经根据新的jar修改如下

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)

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

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

我猜你需要为你的 sesssionFactory 添加 transactionManager:

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

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

如您所说,您没有在项目中使用注释。然后,您必须使用 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>

像这样为您的方法添加事务支持。

如果您使用的是 MAVEN 或 gradle,请在您的 POM 中添加以下条目,或者您可以简单地下载 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>