我目前正在编写一个 spring-webmvc 应用程序,几天前,我的第一个问题是我不知道如何在 Hibernate 和 Spring 中使用事务。现在一切正常,事务管理器已上线,我可以成功处理事务。
这是我基于 Java 的 spring 配置的一部分:
@Configuration
@ComponentScan(basePackages = { "de.macomp.maipds" })
@EnableTransactionManagement
public class MainConfigLib {
...
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager manager = new HibernateTransactionManager(sessionFactory());
return manager;
}
}
因此,当我希望我的服务层或 dao 层中的方法在事务中运行时,我只需使用 @Transactional 对其进行注释,一切正常。我的问题是,当我希望服务方法不在事务中运行时,我收到以下错误:
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
发生这种情况的代码如下所示:
...
@Override
public Publisher findByName(String name) {
Session session = this.sessionFactory.getCurrentSession();
//bam!
...
我可以以某种方式“强制”我的环境给我一个“非事务性”会话吗?!我的 DAO 中 sessionFactory 的 transactionManager 属性为空。
将@Transactional 添加到“findByName”可以解决问题,但是对于这种方法,不需要事务...
有任何想法吗?