Как обновить схему базы данных, созданную с помощью инструмента ORM?
Вопрос
Я ищу общее решение для обновления схемы базы данных с помощью инструментов ORM, таких как JPOX или Hibernate.Как вы это делаете в своих проектах?
Первое решение, которое приходит мне в голову, - это создать свой собственный механизм обновления баз данных, при котором всю работу будут выполнять SQL-скрипты.Но в этом случае мне придется помнить о создании новых скриптов каждый раз, когда обновляются сопоставления объектов.И мне все равно придется иметь дело с низкоуровневыми SQL-запросами, вместо того чтобы просто определять сопоставления и позволять инструментам ORM выполнять всю работу...
Итак, вопрос в том, как это сделать правильно.Возможно, какие-то инструменты позволяют упростить эту задачу (например, я слышал, что в Rails встроен такой механизм), если да, пожалуйста, помогите мне решить, какой инструмент ORM выбрать для моего следующего Java-проекта.
Решение
Ликвидационная база это интересная библиотека с открытым исходным кодом для проведения рефакторинга (обновления) баз данных.Я не использовал его, но обязательно попробую в своем следующем проекте, где мне нужно обновить схему БД.
Другие советы
Я не понимаю, почему схемы, сгенерированные ORM, как-то отличаются от других схем БД - проблема та же.Предполагая, что ваш ORM выдаст сценарий генерации, вы можете использовать внешний инструмент для выполнения различий
Я не пробовал, но Google вернул мне SQLCompare - сопоставление как один из вариантов - я уверен, что есть и другие.
Мы передаем сценарии обновления кода SQL, демонтируем схему и перестраиваем ее, применяя сценарии обновления как часть нашего непрерывного процесса сборки.Если какие-либо сопоставления в режиме гибернации не соответствуют схеме, сборка завершится с ошибкой.
Поддерживать базу данных здесь тоже можно помочь.
Вы можете проверить это сравнение характеристик из некоторых инструментов обновления схемы базы данных.
Сравнение количества вопросов в SOW для некоторых из этих инструментов:
- мой батис (помечено 1049 вопросов)
- Ликвидационная база (помечено 663 вопроса)
- Пролетный путь (помечено 400 вопросов)
- Развертывание DBDeploy (помечено 24 вопроса).
Я думаю, вам лучше всего использовать ORM-инструмент, который включает миграцию базы данных, например Дозвуковой:
http://subsonicproject.com/2-1-pakala/subsonic-using-migrations/
В итоге мы создавали сценарии обновления каждый раз, когда меняли базу данных.Итак, есть скрипт с версии 10 по 11, с 11 по 12 и т.д..Затем мы можем запустить любой последовательный набор скриптов, чтобы перейти с какой-либо существующей версии на новую.Мы сохранили существующую версию в базе данных, чтобы мы могли обнаружить это при запуске.
Да, это был код, специфичный для конкретной базы данных!Одна из главных проблем с гибернацией!
При работе с Hibernate я использую класс установщика, который запускается из командной строки и имеет опции для создания схемы базы данных, вставки базовых данных и динамического обновления схемы базы данных с помощью Текущая схема.Я нахожу это чрезвычайно полезным.Это также дает мне возможность размещать одноразовые скрипты, которые будут запускаться при запуске новой версии, например, для заполнения нового поля в существующей таблице базы данных.