gpt4 book ai didi

java - 创建两个entityManagerFactory

转载 作者:行者123 更新时间:2023-11-30 11:21:17 25 4
gpt4 key购买 nike

也许我要问的是一个愚蠢的问题,我想知道在 Spring MVC 配置中是否可能有两个 entityManagerFactory。我会解释原因。

我有一个 LocalContainerEntityManagerFactoryBean,我在其中配置了一个 hibernate.tenant_identifier_resolver,我使用它来使用用户 session 通过 LDAP 确定租户,然后使用一个数据库模式或另一个,然后我使用“multi_tenant_connection_provider”创建数据库连接对于那个模式。现在我的应用程序有一个调度程序,需要访问所有模式并从所有数据库中获取一些信息。因此,为了不触及已经配置的 entityManagerFactory,我想的是在通过“multi_tenant_connection_provider”创建数据库连接之前,用我自己的“hibernate.tenant_identifier_resolver”实现创建一个新的来控制我想要的模式而不是 LDAP .问题看起来像 Spring 不允许我配置两个 entityManagerFactory。你能给我一些关于如何实现我想要的建议吗?

问候!

最佳答案

是的,可以使用多个 EntityManagers。在我的项目中,我使用了注释配置,其中有:

@Configuration
@EnableTransactionManagement
public class AppConfig {

@Bean
public SessionFactory smartDataSessionFactory() {
return new LocalSessionFactoryBuilder(smartDataDatasource())
.scanPackages("...)
.addProperties(smartDataHibernateProperties())
.buildSessionFactory();
}


@Bean
public SessionFactory analysisSessionFactory() {
return new LocalSessionFactoryBuilder(analysisDatasource())
.scanPackages("...)
.addProperties(analysisHibernateProperties())
.buildSessionFactory();
}
...
}

当引用 entityManagers 时,一定要使用 Qualifier 注释。另请注意,每个 SessionFactory 将使用它自己的 TransactionFactory

@Repository
@Transactional(value = "analysisTransactionManager")
public class ToURemunerationDaoImpl implements ToURemunerationDao {
private SessionFactory analysisSessionFactory;

private SessionFactory smartDataSessionFactory;

@Autowired
@Qualifier("analysisSessionFactory")
public void setAnalysisSessionFactory(SessionFactory sessionFactory) {
this.analysisSessionFactory = sessionFactory;
}

@Autowired
@Qualifier("smartDataSessionFactory")
public void setSmartDataSessionFactory(SessionFactory sessionFactory) {
this.smartDataSessionFactory = sessionFactory;
}
...
}

关于java - 创建两个entityManagerFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22320438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com