Hibernate中每个实体的选择性自动架构生成设置



是否可以选择性地选择Hibernate的模式生成设置应用于哪些实体或数据源?

hibernate.hbm2dl.auto=none

我想使用数据库中不想修改的现有表,但也要自动创建一些新表。

您将不得不使用->hibernate.hbm2dl.auto=update而不是none。

我找到了一篇很好的文章,描述了如何通过定义指向不同实体包的多个配置类来实现这一点。似乎唯一的方法就是通过编程来实现这一点。

对于我不想创建或更新任何表的现有数据库表,我将使用hibernate进行以下配置。hbm2ddl.auto设置为none

@PropertySource({"classpath:existing-database.properties"})
@EnableJpaRepositories(basePackages = "com.project.model.existing")
@Configuration
public class ExistingDatabaseConfig {
@Autowired
private Environment env;
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean userEntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(userDataSource());
em.setPackagesToScan("com.project.model.existing");
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.hbm2ddl.auto", "none");
properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
em.setJpaPropertyMap(properties);
return em;
}
@Primary
@Bean
public DataSource userDataSource() {
DriverManagerDataSource dataSource
= new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("user.jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.user"));
dataSource.setPassword(env.getProperty("jdbc.pass"));
return dataSource;
}
}

对于那些应该创建表的实体,我将有一个单独的配置,其中hibernate.hbm2dl.auto设置为创建或更新

@PropertySource({"classpath:not-existing-database.properties"})
@EnableJpaRepositories(basePackages = "com.project.model.notexisting")
@Configuration
public class NotExistingDatabaseConfig {
@Autowired
private Environment env;
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean userEntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(userDataSource());
em.setPackagesToScan("com.project.model.notexisting");
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.hbm2ddl.auto", "create-or-update");
properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
em.setJpaPropertyMap(properties);
return em;
}
@Primary
@Bean
public DataSource userDataSource() {
DriverManagerDataSource dataSource
= new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("user.jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.user"));
dataSource.setPassword(env.getProperty("jdbc.pass"));
return dataSource;
}
}

最新更新