Hibernate hibernate.ddl-auto - как избежать ручной необходимости заменить «создать» на «обновление» после первого запуска приложения - PullRequest
0 голосов
/ 29 апреля 2018

Если я хочу, чтобы Hibernate создал схему для меня, мне нужно установить свойство

spring.jpa.hibernate.ddl-auto=create

И как только он был создан, мне нужно вручную обновить его до update или просто закомментировать эту строку свойства.

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

Я хочу исключить ручную вещь здесь. Я не хочу помнить об изменении значения, когда приложение перемещается между различными средами (другой разработчик, QA env 1, QA env 2, .....)

Разве нельзя указать hibernate: создавать схему, только если она отсутствует, и обновлять / ничего не делать иначе ?

1 Ответ

0 голосов
/ 29 апреля 2018

В общем, это плохая идея. create-drop и update предназначены для тестирования и не рекомендуются для производственного использования.

Производственные системы всегда должны использовать validate. Не используйте Hibernate для создания таблиц.

Вам лучше использовать такой инструмент, как liquibase , который может безопасно обрабатывать обновления баз для обновлений приложений. Поскольку вы используете Spring, вы можете настроить профили в XML, которые могут работать с параметром maven -P, чтобы у вас был профиль для производства, такой как

<beans profile="liquibase">
    <bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase" depends-on="systemProperties">
        <property name="dataSource" ref="dataSource" />
        <property name="changeLog" value="classpath:liquibase-changelog.xml" />
        <property name="defaultSchema" value="${jdbc.schema}" />
    </bean>

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" depends-on="liquibase">
        <property name="persistenceUnitName" value="PersistenceUnit" />
    </bean>
</beans>

Который затем устанавливает базу данных при запуске. Liquibase будет знать, какие операторы были выполнены, и запускать только операторы alter table или подобные, когда это необходимо.

Это стоит усилий.

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