我目前正在尝试弄清如何在项目中使用两种不同的模式:目前,我可以从我在Eclipse上创建的两种不同的数据源中成功生成实体
基本上是同一台服务器,但是为了访问这两种模式,我不得不使用两个不同的连接字符串。 问题在于,通过切换连接以便从其他架构生成实体,无法识别先前的实体:
有没有办法解决这个问题?无论如何,我有办法让我的实体得到认可吗?
编辑: 我最终创建了两个额外的JPA项目来生成我的实体,然后将这两个项目添加到主项目的POM中,但它仍然只读取一个持久性单元,而另一模式的实体则未被识别。
答案 0 :(得分:0)
忘了回答这个问题,我终于找到了解决这个问题的方法。
在application.properties
中,我们添加了模式modules
和supplychain
的属性,并为两个模式创建了2个JPA项目,并在那里生成了实体。
之后,我们在SpringServletInitializer中创建了bean:
private Map<String, String> jpaProperties() {
Map<String, String> p = new HashMap<String, String>();
p.put("hibernate.dialect", env.getProperty("spring.jpa.properties.hibernate.dialect"));
p.put("hibernate.id.new_generator_mappings",
env.getProperty("spring.jpa.properties.hibernate.id.new_generator_mappings"));
p.put("hibernate.format_sql", env.getProperty("spring.jpa.properties.hibernate.format_sql"));
p.put("hibernate.naming.physical-strategy", env.getProperty("spring.jpa.hibernate.naming.physical-strategy"));
p.put("hibernate.ddl-auto", env.getProperty("spring.jpa.hibernate.ddl-auto"));
return p;
}
@Bean
@ConfigurationProperties(prefix = "modules.datasource")
public DataSource modulesDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
@ConfigurationProperties(prefix = "supplychain.datasource")
public DataSource supplychainDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="modules")
public LocalContainerEntityManagerFactoryBean modulesEntityManagerFactory(
org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder builder) throws IOException {
return builder.dataSource(modulesDataSource()).packages(Moduli.class).properties(jpaProperties()).persistenceUnit("JPAModules").build();
}
@Bean(name="supplychain")
@Primary
public LocalContainerEntityManagerFactoryBean supplychainEntityManagerFactory(EntityManagerFactoryBuilder builder)
throws IOException {
return builder.dataSource(supplychainDataSource()).packages(Rent.class).properties(jpaProperties()).persistenceUnit("JPASupplychain").build();
}
@Bean(name = "modulesTransactionManager")
public PlatformTransactionManager modulesTransactionManager(EntityManagerFactoryBuilder builder)
throws IOException {
JpaTransactionManager tm = new JpaTransactionManager();
tm.setEntityManagerFactory(modulesEntityManagerFactory(builder).getObject());
tm.setDataSource(modulesDataSource());
return tm;
}
@Bean(name = "supplychainTransactionManager")
@Primary
public PlatformTransactionManager supplychainTransactionManager(EntityManagerFactoryBuilder builder)
throws IOException {
JpaTransactionManager tm = new JpaTransactionManager();
tm.setEntityManagerFactory(supplychainEntityManagerFactory(builder).getObject());
tm.setDataSource(supplychainDataSource());
return tm;
}
添加两个数据源,我终于可以使用两个持久性!