Выборочные настройки Automati c Schema Generation для объекта в Hibernate - PullRequest
0 голосов
/ 19 февраля 2020

Можно ли выборочно выбирать, к каким объектам или источникам данных применяются параметры создания схемы Hibernate?

hibernate.hbm2ddl.auto = нет

I´d нравится использовать существующие таблицы базы данных, которые я не хочу изменять, но также автоматически создавать новые.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Я нашел хорошую статью, которая описывает, как это сделать, определив несколько классов конфигурации, указывающих на разные пакеты сущностей. Кажется, единственный способ сделать это программно.

Для существующей таблицы базы данных, где я не хочу создавать или обновлять какие-либо таблицы, у меня будет следующий конфиг с hibernate.hbm2ddl.auto установлен на нет

@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.hbm2ddl.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;
    }

}
0 голосов
/ 19 февраля 2020

Вам придется использовать -> hibernate.hbm2ddl.auto = update вместо none.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...