Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多数据库连接重用实体映射_Java_Spring Boot_Hibernate_Spring Data Jpa_Multiple Databases - Fatal编程技术网

Java 多数据库连接重用实体映射

Java 多数据库连接重用实体映射,java,spring-boot,hibernate,spring-data-jpa,multiple-databases,Java,Spring Boot,Hibernate,Spring Data Jpa,Multiple Databases,在这种情况下,我们连接到不同的数据库环境,但每个环境中的表都是相同的 是否有任何方法可以为每个环境重用实体类 我为每个环境使用单独的配置类。下面是其中一个环境的配置,类似地,我还有4个环境。“包”推断要连接到哪个环境 codejava @Configuration @EnableJpaRepositories(basePackages = {"packages"}, entityManagerFactoryRef = "OneEntityManage

在这种情况下,我们连接到不同的数据库环境,但每个环境中的表都是相同的

是否有任何方法可以为每个环境重用实体类

我为每个环境使用单独的配置类。下面是其中一个环境的配置,类似地,我还有4个环境。“包”推断要连接到哪个环境

code
java

@Configuration
@EnableJpaRepositories(basePackages = {"packages"},
        entityManagerFactoryRef = "OneEntityManager",
        transactionManagerRef = "OneTransactionManager")
public class DevDataSourceConfig {
    @Bean
    @Primary
    public LocalContainerEntityManagerFactoryBean OneEntityManager() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(OneDataSource());
        em.setPackagesToScan(String[]{"packages"});
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        HashMap<String, Object> properties = new HashMap<>();
        properties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
        properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
        em.setJpaPropertyMap(properties);
        return em;
    }

    @Primary
    @Bean
    public DataSource OneDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driverclass);
        dataSource.setUrl(url);
        dataSource.setUsername(uName);
        dataSource.setPassword(dbPass);
        return dataSource;
    }

    @Primary
    @Bean
    public PlatformTransactionManager OneTransactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(OneEntityManager().getObject());
        return transactionManager;
    }
} 
@配置
@EnableJpaRepositories(basePackages={“packages”},
entityManagerFactoryRef=“OneEntityManager”,
transactionManagerRef=“OneTransactionManager”)
公共类DevDataSourceConfig{
@豆子
@初级的
public LocalContainerEntityManagerFactoryBean OneEntityManager(){
LocalContainerEntityManagerFactoryBean em=新的LocalContainerEntityManagerFactoryBean();
em.setDataSource(OneDataSource());
em.setPackagesToScan(字符串[]{“packages”});
HibernateJavaEndorapter vendorAdapter=新的HibernateJavaEndorapter();
em.setjpavendor适配器(供应商适配器);
HashMap属性=新建HashMap();
properties.put(“hibernate.hbm2ddl.auto”,env.getProperty(“hibernate.hbm2ddl.auto”);
properties.put(“hibernate.dial”,env.getProperty(“hibernate.dial”);
em.setJpaPropertyMap(属性);
返回em;
}
@初级的
@豆子
公共数据源OneDataSource(){
DriverManager数据源dataSource=新的DriverManager数据源();
setDriverClassName(DriverClassName);
setUrl(url);
dataSource.setUsername(uName);
setPassword(dbPass);
返回数据源;
}
@初级的
@豆子
公共平台TransactionManager OneTransactionManager(){
JpaTransactionManager transactionManager=新的JpaTransactionManager();
transactionManager.SetEntityManager工厂(OneEntityManager().getObject());
返回事务管理器;
}
} 

yes-在多租户上搜索-可能是一个好的开始。如果您的实体中没有定义任何特定于数据库的内容(如本机查询或表/列名等),则可以将它们用于所有数据库系统。无论是使用不同模式的相同数据库系统,还是完全不同的数据库系统,都是一样的。注意事务处理和关系。特别是(在@juwil所说的基础上),您需要将
@transaction(transactionManager=…)
与声明性transactions@AndrewS,对于租户,我是否仍然能够使用实体和存储库?@Ace-yes-唯一的区别是连接指向的位置(这取决于承租人)。