Как обновить схему базы данных, созданную с помощью инструмента ORM? - PullRequest
5 голосов
/ 15 сентября 2008

Я ищу общее решение для обновления схемы базы данных с помощью инструментов ORM, таких как JPOX или Hibernate. Как ты это делаешь в своих проектах?

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

Так что вопрос в том, как это сделать правильно. Возможно, некоторые инструменты позволяют упростить эту задачу (например, я слышал, что в Rails такой механизм встроен), если да, пожалуйста, помогите мне решить, какой инструмент ORM выбрать для моего следующего Java-проекта.

Ответы [ 8 ]

7 голосов
/ 15 сентября 2008

LiquiBase - интересная библиотека с открытым исходным кодом для обработки реорганизаций базы данных (обновлений). Я не использовал его, но обязательно попробую в следующем проекте, где мне нужно обновить схему БД.

2 голосов
/ 02 октября 2008

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

2 голосов
/ 15 сентября 2008

Я не понимаю, почему схемы, сгенерированные ORM, отличаются от других схем БД - проблема та же. Предполагая, что ваш ORM выложит скрипт генерации, вы можете использовать внешний инструмент для выполнения diff

Я не пробовал, но Google вернулся с SQLCompare в качестве одного варианта - я уверен, что есть другие.

1 голос
/ 21 января 2015

Вы можете проверить это сравнение функций некоторых инструментов обновления схемы базы данных.

Сравнение количества вопросов в SOW некоторых из этих инструментов:

  • mybatis (1049 отмеченных вопросов)
  • Liquibase (отмечено 663 вопроса)
  • Flyway (400 вопросов с тегами)
  • DBDeploy (24 вопроса с тегами).
1 голос
/ 27 февраля 2011

DbMaintain также может помочь здесь.

0 голосов
/ 15 сентября 2008

При работе с Hibernate я использую класс установщика, который запускается из командной строки и имеет параметры для создания схемы базы данных, вставки базовых данных и динамического обновления схемы базы данных с использованием SchemaUpdate . Я нахожу это чрезвычайно полезным. Это также дает мне возможность разместить одноразовые скрипты, которые будут запускаться при запуске новой версии, например, для заполнения нового поля в существующей таблице БД.

0 голосов
/ 15 сентября 2008

В итоге мы создавали сценарии обновления каждый раз, когда меняли базу данных. Итак, есть сценарий от версии 10 до 11, от 11 до 12 и т. Д. Затем мы можем запустить любой последовательный набор сценариев, чтобы перейти от существующей версии к новой версии. Мы сохранили существующую версию в базе данных, чтобы мы могли обнаружить ее при запуске.

Да, это связано с конкретным кодом базы данных! Одна из главных проблем с Hibernate!

0 голосов
/ 15 сентября 2008

Я думаю, что вам лучше всего использовать ORM-инструмент, который включает миграцию базы данных, как SubSonic :

http://subsonicproject.com/2-1-pakala/subsonic-using-migrations/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...