Не используя hibernate.hbm2ddl.auto, как я могу экспортировать все исходные схемы в Flyway?

Я на почти готовой стадии развития JEE. С большой рекомендацией НЕ использовать Hibernate hbm2ddl.auto в производстве, я решил удалить его.

Итак, теперь я узнал про Flyway, который кажется отличным для будущих изменений и миграций db, но я застрял на первом шаге: у меня много объектов, некоторые объекты наследуются от базовых объектов. Это делает оператор CREATE очень сложным.

Какова наилучшая практика для создания первого файла миграции?

Спасибо!

Ответы

Ответ 1

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

Вкратце, причины, по которым не удалось использовать hbm2ddl.auto после первого развертывания, заключаются в том, что create уничтожит существующие данные, а update недостаточно надежна, чтобы охватить все типы изменений схемы (как это звучит так, как вы уже знаете из этого SO-вопроса).

Flyway - очень полезный инструмент, но для этого требуется уровень дисциплины, который, возможно, не существовал во время разработки. При переходе от начального выпуска необходимо создать сценарии обновления базы данных для Flyway, которые эквивалентны изменениям, внесенным в объекты с момента последней версии. Существуют инструменты (например, различные коммерческие продукты из Redgate), которые могут помочь здесь: они пытаются "разделить" две схемы и сгенерировать схему и/или сценарии обновления данных для получения из базы данных A в базу данных B. Но, по моему опыту, ни один из них не идеален, и они не вполне достигают святого грааля, позволяющего полностью автоматизировать подход.

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

Ответ 2

Для первого файла миграции вам просто нужен текущий ddl вашей базы данных. Существует множество инструментов, которые могут получить это для вас (например, опция "copy ddl" в инструменте базы данных IntelliJ IDEA или клиент GUI от поставщика вашей базы данных).

Ответ 3

Я не уверен в Flyway, но есть альтернативный способ, вы можете использовать ant задачи для hibernate для создания или обновления схемы.

Надеюсь, что это поможет.

Ответ 4

Если вы создадите свой проект с помощью Maven, вы можете использовать Hibernate maven plugin.