Создать схему, если она не существует, с помощью Spring Jpa с Hibernate - PullRequest
0 голосов
/ 24 января 2019

Я работаю над приложением spring boot 2 и пытаюсь установить соединение с базой данных postgresql с настройкой источника данных hikari и Spring Jpa.

Я добился успеха в этом, и я использую hibernate.hbm2ddl.auto как update, поэтому он создает таблицу, если не существует, но единственная проблема в том, что он выдает исключение, когда схема не существует

Error

GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement
Caused by: org.postgresql.util.PSQLException: ERROR: schema "test_schema" does not exist

Я все настроил вручную через класс конфигурации

Класс конфигурации

@Bean
@Primary
public HikariDataSource dataSource() {

    HikariConfig config = new HikariConfig();

    config.setJdbcUrl(databaseUrl);
    config.setUsername(username);
    config.setPassword(password);
    config.setDriverClassName(driverClassName);
    config.setConnectionTimeout(connectionTimeout);
    config.setIdleTimeout(idleTimeout);
    config.setMaximumPoolSize(maxpoolSize);
    config.setMaxLifetime(maxLifeTime);
    config.setMinimumIdle(minIdleConnections);
    //config.setPoolName(poolName);

    return new HikariDataSource(config);
}

@Bean
public Properties additionalProps() {
    Properties jpaProps = new Properties();

    jpaProps.put(hbDialect, "org.hibernate.dialect.PostgreSQLDialect");
    jpaProps.put(autoDDL, "update");
    jpaProps.put(showSql, true);
    jpaProps.put(formatSql, true);

    return jpaProps;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
    factory.setDataSource(dataSource());
    factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    factory.setPackagesToScan("com.target.storetaskcount.entity");
    factory.setJpaProperties(additionalProps());
    return factory;
}

@Bean
public JpaTransactionManager transactionManager(EntityManagerFactory factory) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
    return transactionManager;
}

Как бы я сделал это, чтобы создать схему, если она не существует?

Я видел подобный вопрос здесь и попробовал все безуспешно Аналогичный вопрос (я не хочу использовать flyway db)

Вот документация hibernate-doc , но не ясно, как добавить это свойство для создания схемы javax.persistence.schema-generation.database.action

1 Ответ

0 голосов
/ 24 января 2019

Добавление этого свойства работало и создавалась схема, если ее не существует здесь

jpaProps.put("javax.persistence.create-database-schemas", true);

JPA-вариант hibernate.hbm2dll.create_namespaces. Указывает, должен ли поставщик сохранения создавать схемы базы данных в дополнение к созданию объектов базы данных (таблиц, последовательностей, ограничений и т. Д.). Значение этого логического свойства должно быть установлено в значение true, если поставщик сохраняемости должен создавать схемы в базе данных или генерировать DDL, содержащий команды «CREATE SCHEMA». Если это свойство не указано (или явно ложно), поставщик не должен пытаться создавать схемы базы данных.

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