Как обновить схему базы данных, созданную с помощью инструмента ORM?

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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
0
5 202
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

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

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

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

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

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

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

Ответ принят как подходящий

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

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

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

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

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

Другие вопросы по теме