【发布时间】:2012-08-06 12:44:11
【问题描述】:
我在基于注解的配置类中配置了两个事务管理器:
@Configuration
@EnableTransactionManagement
public class DBConfig implements TransactionManagementConfigurer {
//...
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return defTransactionManager();
}
@Bean
@Qualifier("defSessionFactory")
public LocalSessionFactoryBean defSessionFactory() {
LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
sfb.setDataSource(defDataSource());
Properties props = new Properties();
//...
sfb.setHibernateProperties(props);
sfb.setPackagesToScan("my.package");
return sfb;
}
@Bean
@Qualifier("defTransactionManager")
public PlatformTransactionManager defTransactionManager() {
return new HibernateTransactionManager(defSessionFactory().getObject());
}
@Bean
@Qualifier("secondSessionFactory")
public LocalSessionFactoryBean secondSessionFactory() {
LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
sfb.setDataSource(secondDataSource());
Properties props = new Properties();
//...
sfb.setHibernateProperties(props);
sfb.setPackagesToScan("my.package.subpackage");
return sfb;
}
@Bean
@Qualifier("secondTM")
public PlatformTransactionManager secondTransactionManager() {
return new HibernateTransactionManager(secondSessionFactory().getObject());
}
}
我的意图是使用带有两个事务管理器的注释事务。 像这样注释的方法
@Transactional
public void method() {}
应该由defTransactionManager处理
以及像这样注释的方法
@Transactional("secondTM")
public void anotherMethod() {}
通过 secondTransactionManager
defTransactionManager 工作正常,但是当涉及到 anotherMethod() 我得到:
org.hibernate.HibernateException: No Session found for current thread
当我对另一个方法使用编程事务管理(自动连接 secondSessionFactory,使用 TransactionTemplate)时,一切正常。
【问题讨论】:
标签: spring hibernate annotations config