我已将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)
我没有在我的应用程序中使用注释
我无法解决此问题。请帮助我了解异常的可能原因
答案 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>