Рубрики
Без рубрики

Спящий режим hbm2ddl.автоматическая генерация схемы

В этой статье мы рассмотрим, как работает инструмент генерации схемы Hibernate hbm2ddl.auto и когда его целесообразно использовать.

Автор оригинала: Vlad Mihalcea.

Вступление

В этой статье мы рассмотрим, как работает инструмент генерации схемы Hibernate hbm2ddl.auto и когда его целесообразно использовать.

Стратегии генерации схемы гибернации

При работе с JPA и Hibernate у вас есть два варианта управления базовой схемой базы данных:

  • Вы можете инкапсулировать изменения схемы в сценарии миграции и использовать инструмент, например Flyway , чтобы применить сценарии миграции при запуске приложения.
  • Вы можете сгенерировать или обновить схему базы данных на основе сопоставления объектов JPA и гибернации с помощью инструмента hbm2ddl.auto.

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

Например, интеграционные тесты ядра Hibernate активно используют инструмент hbm2ddl.auto для управления базовой схемой базы данных. Поскольку интеграционные тесты должны выполняться изолированно, каждый интеграционный тест определяет свой собственный набор объектов JPA и Hibernate, которые, в свою очередь, сопоставляются со схемой базы данных.

Чтобы избежать создания сценариев базы данных для всех поддерживаемых реляционных баз данных и учитывая, что это более 10 тыс. интеграционных тестов, инструмент hbm2ddl.auto позволяет проекту Hibernate автоматически генерировать сценарии DDL. Это чрезвычайно удобно для команды разработчиков Hibernate, поскольку позволяет им сосредоточиться на функциях тестирования.

Параметры гибернации hbm2ddl.автоматическое создание схемы

Свойство hibernate.hbm2ddl.auto конфигурация используется для настройки процесса создания схемы базы данных Hibernate и может принимать следующие значения:

  • нет – Этот параметр отключает инструмент hbm2ddl.auto , поэтому Hibernate не будет предпринимать никаких действий для управления базовой схемой базы данных.
  • только для создания -Этот параметр указывает Hibernate на создание схемы базы данных из модели сущностей.
  • drop – Этот параметр указывает Hibernate удалить схему базы данных, используя модель сущностей в качестве ссылки для инструкций DDL DROP.
  • создать – Этот параметр указывает Hibernate удалить схему базы данных и затем воссоздать ее заново, используя модель сущности в качестве ссылки.
  • создать-удалить – Этот параметр указывает Hibernate удалить схему базы данных и воссоздать ее позже, используя модель сущности в качестве ссылки. И после закрытия JPA EntityManagerFactory или Hibernate SessionFactory схема базы данных снова будет удалена.
  • проверить – Этот параметр указывает Hibernate проверить базовую схему базы данных на соответствие сопоставлениям сущностей.
  • обновить – Этот параметр указывает Hibernate обновить схему базы данных путем сравнения существующей схемы с сопоставлениями сущностей и создания соответствующих сценариев переноса схемы.

Какие параметры Hibernate hbm2ddl.auto следует использовать?

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

Если вы используете инструмент переноса схемы, например Flyway и хотите сгенерировать начальный сценарий миграции из объектов JPA и Hibernate, затем вам следует использовать параметры только для создания и drop и регистрировать автоматически сгенерированные инструкции SQL для извлечения инструкций DDL.

Параметры create и create-drop имеют смысл для основных интеграционных тестов Hibernate, но не подходят для проекта конечного пользователя, поскольку для создания схемы базы данных, необходимой для выполнения интеграционных тестов, следует использовать те же сценарии миграции схем, которые вы используете для производственной системы.

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

Параметр проверить может быть полезен при выполнении интеграционных тестов, чтобы убедиться, что базовая схема совместима с сопоставлениями сущностей JPA. Однако, если у вас есть интеграционные тесты, охватывающие все пути доступа к данным для чтения и записи, вам вообще не понадобится опция проверить .

Параметры генерации схемы JPA

Конфигурация для гибернации hibernate.hbm2ddl.auto была стандартизирована JPA с помощью следующих двух параметров:

  • Конфигурация для гибернации
  • hibernate.hbm2ddl.auto

Генерация схемы javax.persistence..database.action конфигурация сообщает Hibernate, следует ли применять миграцию схемы к базовой базе данных при загрузке EntityManagerFactory .

Конфигурация javax.persistence.schema-generation.scripts.action указывает Hibernate, следует ли создавать инструкции DDL для переноса схемы во внешний файл. Инструкции CREATE DDL записываются в файл, указанный свойством javax.persistence.создание схемы.сценарии.создание-цель конфигурации, в то время как инструкции DROP DDL записываются в файл, указанный свойством javax.persistence.создание схемы.сценарии.удаление-цель конфигурации.

JPA javax.сохранение.генерация схемы.database.action и javax.постоянство.создание схемы.сценарии.действие свойство конфигурации ca принимает следующие значения:

  • нет – Это параметр по умолчанию, и он отключает средство создания схемы.
  • создать – Этот параметр указывает Hibernate создать схему базы данных из модели сущности. Это эквивалентно стратегии только для создания |/гибернации.hbm2ddl.auto . drop
  • – Этот параметр эквивалентен стратегии drop hibernate.hbm2ddl.auto . удаление и создание
  • -Этот параметр указывает Hibernate удалить схему базы данных и воссоздать ее позже, используя модель сущности в качестве ссылки. Это эквивалентно стратегии create |/hibernate.hbm2ddl.auto .

Как вы можете видеть, нет эквивалента JPA для стратегий create-drop , validate и update /hibernate.hbm2ddl.auto .

Вывод

Прежде всего, инструмент hbm2ddl.auto для генерации схем очень полезен для проекта Hibernate, поскольку он позволяет создавать интеграционные тесты, которые могут выполняться в любой из поддерживаемых систем баз данных отношений.

Хотя в вашем проекте должен использоваться такой инструмент, как Flyway, для управления сценариями переноса схемы, вы все равно можете использовать hbm2ddl.auto для создания либо начального сценария, либо даже сценариев переноса, с замечанием, что вам следует вручную просмотреть их и, возможно, улучшить в соответствии с требованиями вашего приложения.