Вопрос-ответ

Hibernate: hbm2ddl.auto=update in production?

Гибернация: hbm2ddl.auto = обновление в рабочей среде?

Можно ли запускать приложения гибернации, настроенные с помощью hbm2ddl.auto=update, для обновления схемы базы данных в рабочей среде?

Переведено автоматически
Ответ 1

Нет, это небезопасно.

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

Теоретически, если обновление hbm2ddl работало в процессе разработки, оно должно работать и в рабочей среде. Но на самом деле это не всегда так.

Даже если это сработало нормально, это может быть неоптимально. Администраторам баз данных не просто так платят столько.

Ответ 2

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

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

Ответ 3

Создатели Hibernate не рекомендуют делать это в производственной среде в своей книге "Сохранение Java с помощью Hibernate":


ПРЕДУПРЕЖДЕНИЕ: Мы видели, как пользователи Hibernate пытались использовать SchemaUpdate для автоматического обновления схемы рабочей базы данных. Это может быстро закончиться катастрофой и не будет разрешено вашим администратором базы данных.


Ответ 4

Это не очень хорошая идея для использования hbm2ddl.auto в рабочей среде.

Единственный способ управлять схемой базы данных - использовать сценарии инкрементной миграции, потому что:


  • скрипты будут храниться в VCS вместе с вашей кодовой базой. Когда вы извлекаете ветку, вы воссоздаете всю схему с нуля.

  • инкрементные скрипты могут быть протестированы на сервере контроля качества перед применением в рабочей среде

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

Даже в Руководстве пользователя Hibernate рекомендуется избегать использования hbm2ddl инструмента для производственных сред.

Руководство пользователя Hibernate ORM говорит об этом лучше всего

2023-10-14 17:03 java hibernate