Java-эквивалент для изменений схемы базы данных, например, South для Django? - PullRequest
4 голосов
/ 11 марта 2010

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

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

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

Ответы [ 5 ]

2 голосов
/ 12 марта 2010

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

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

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

  2. Сохраните "текущий" номер версии для вашей схемы в вашем коде.

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

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

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

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

Удачи тебе!

1 голос
/ 15 июня 2016

Может быть, попробовать flyaway . Похоже, хорошая альтернатива.

0 голосов
/ 24 июня 2016

Если вы используете спящий режим, тогда оформить заказ liquibase

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

Это было в течение 10 лет, так что это довольно солидно. Он может поддерживать другие ORM , просто покопайтесь на их сайте. Оформление расширения «Либибаза + гибернация»:

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

0 голосов
/ 28 ноября 2013

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

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

0 голосов
/ 04 мая 2012

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

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

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

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

...