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

StackOverflow https://stackoverflow.com/questions/64148

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Поддерживать базу данных здесь тоже можно помочь.

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top