Эквивалент Java для изменений схемы базы данных, таких как Юг для Django?

Я работал над проектом Django, используя South для отслеживания и управления изменениями схемы базы данных. Я начинаю новый Java-проект с помощью Google Web Toolkit и задаюсь вопросом, есть ли эквивалентный инструмент. Для тех, кто не знает, вот что делает Юг:

  • Автоматически распознавать изменения в моих моделях базы данных Python (добавлять / удалять столбцы, таблицы и т. Д.)
  • Автоматически создавать операторы SQL для применения этих изменений к моей базе данных
  • Отслеживайте применяемые миграции схем и применяйте их по порядку
  • Разрешить перенос данных с помощью кода Python. Например, разделение поля имени на поле имени и фамилии с помощью функции Python split ()

Я еще не определился с моей Java ORM, но Hibernate выглядит самым популярным. Для меня возможность легко вносить изменения в схему базы данных будет важным фактором.


person gerdemb    schedule 11.03.2010    source источник
comment
Искал такие же, тоже нашел: mybatis и Пролетный путь   -  person gaboroncancio    schedule 21.01.2015


Ответы (5)


Вау, Юг звучит круто! Я не уверен в чем-то готовом, что поможет вам почти так же, как это, однако, если вы выберете Hibernate в качестве решения ORM, вы сможете без особых проблем создать свой собственный пакет для инкрементной миграции данных.

Вот подход, который я использовал в своем собственном проекте, он работал у меня довольно хорошо более пары лет и несколько обновлений / изменений схемы:

  1. Поддерживайте в базе данных таблицу schema_version, которая просто определяет число, представляющее версию схемы вашей базы данных. Если хотите, с этой таблицей можно работать за пределами Hibernate.

  2. Сохраняйте «текущий» номер версии схемы внутри своего кода.

  3. Если номер версии в коде новее, чем номер версии базы данных, вы можете использовать утилиту Hibernate SchemaUpdate, которая обнаружит любые добавления схемы (ПРИМЕЧАНИЕ, только добавления), такие как новые таблицы, столбцы и ограничения.

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

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

Надеюсь, кто-нибудь найдет хороший ответ для более «невмешательства», но я подумал, что поделюсь подходом, который мне очень понравился.

Удачи тебе!

person BryanD    schedule 11.03.2010

поскольку я ищу то же самое, чего я достиг до сих пор.

Сначала мы использовали dbdeploy. Он управляет большинством вещей за вас, но вам придется писать все сценарии перехода самостоятельно! Это означает, что каждое изменение, которое вы вносите, должно быть в отдельном сценарии, который вам придется писать с нуля. Не очень удобно, но работает очень надежно.

Второе, с чем я столкнулся, - это liquibase. Он хранит конфигурацию в одном файле xml. Не очень интуитивно понятный для чтения, но управляемый. Плюс для этого есть плагин Intellij Idea. На момент написания в нем все еще есть мелкие недочеты, но, как заверил меня автор, они скоро будут исправлены.

Идеальным решением было бы заставить юг работать с вашей Java-средой. Это действительно был бы инструмент для женитьбы: D

person Jonas    schedule 04.05.2012

Возможно, попробуйте flyaway. Похоже на хорошую альтернативу.

person Shasak    schedule 15.06.2016

Я думал об использовании django-jython только для миграции баз данных в нашем устаревшем приложении Java. Последняя версия Jython - 2.5.4rc1, но я думаю, что могу снизить риск, просто используя ее для миграции на юг.

Тем более, что я могу использовать inspectdb для создания моделей для меня. А затем замените части Java на Python «без проблем».

person michaeljoseph    schedule 28.11.2013

Если вы используете спящий режим, проверьте liquibase.

http://www.liquibase.org/databases.html

Он существует уже 10 лет, так что он довольно прочный. Он может поддерживать другие ORM, просто покопайтесь на их веб-сайте. Оформить заказ на расширение Liquibase + Hibernate можно здесь:

https://github.com/liquibase/liquibase-hibernate

person James111    schedule 24.06.2016