Я ищу общее решение для обновления схемы базы данных с помощью инструментов ORM, таких как JPOX или Hibernate. Как вы это делаете в своих проектах?
Первое решение, которое приходит мне в голову, - это создать собственный механизм обновления баз данных, в котором всю работу будут выполнять сценарии SQL. Но в этом случае мне придется помнить о создании новых скриптов каждый раз, когда обновляются сопоставления объектов. И мне все равно придется иметь дело с низкоуровневыми SQL-запросами, вместо того, чтобы просто определять сопоставления и позволять инструментам ORM выполнять всю работу ...
Итак, вопрос в том, как это сделать правильно. Возможно, некоторые инструменты позволяют упростить эту задачу (например, я слышал, что в Rails есть встроенный такой механизм), если да, пожалуйста, помогите мне решить, какой инструмент ORM выбрать для моего следующего Java-проекта.




Я думаю, что лучше всего использовать 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 по некоторым из этих инструментов: