Книги / статьи / рекомендации о том, как написать инструмент для переноса данных базы данных из одной версии Java-приложения с поддержкой Hibernate в следующую. - PullRequest
0 голосов
/ 27 августа 2010

Мы разрабатываем и поддерживаем и используем приложение, которое использует Hibernate как инструмент объектно-реляционного отображения для сохранения наших объектов Java в базе данных.К сожалению, в OurApp 1.0 и OurApp 2.0 произошли некоторые изменения в объектной модели и, следовательно, в схеме базы данных.Итак, мы хотели бы написать автоматизированный инструмент для переноса данных из баз данных клиентов, использующих OurApp 1.0, в новую базу данных со схемой, соответствующей OurApp 2.0.

Мы думали о создании инструмента, имеющего две версии каждого класса Java.Например, у нас может быть класс Java MyObject_1_0, который соответствует классу MyObject, как он появляется в OurApp 1.0, и класс MyObject_2_0, который соответствует классу MyObject, как он появляется в OurApp 2.0.Затем мы напишем код, который знает, как преобразовать MyObject_1_0 в MyObject_2_0.

Однако я не делал этого раньше, и я хотел бы знать, является ли это лучшим подходом.Было бы неплохо, если бы я мог рассмотреть некоторую литературу и исследования о лучших практиках и распространенных ошибках.Кто-нибудь может порекомендовать книги или статьи, которые могут оказаться мне полезными, поскольку мы исследуем наиболее эффективные способы сделать это?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 28 августа 2010

Мы думали о создании инструмента, имеющего две версии каждого класса Java.Например, у нас может быть класс Java MyObject_1_0, который соответствует классу MyObject, как он появляется в OurApp 1.0, и класс MyObject_2_0, который соответствует классу MyObject, как он появляется в OurApp 2.0.Затем мы напишем код, который знает, как преобразовать MyObject_1_0 в MyObject_2_0.

Как и предположил Питер, я бы действительно подумал об использовании инструмента миграции баз данных вместо этого, это должно бытьгораздо более эффективный, а также меньше работы в конце, как мы увидим.А так как целевая база данных не находится под вашим контролем, я бы искал что-то, позволяющее описывать изменения без учета базы данных, например liquibase , использующий XML.

Еще один аргумент вПреимущество liquibase заключается в том, что он обеспечивает Интеграцию Hibernate , что является убийственной функцией для вашего сценария: он может генерировать сценарий миграции, сравнивая новые сопоставления ваших сущностей (XML или аннотации) с старая база данных.Даже если результат нуждается в доработке, это должно значительно упростить работу.Из документации:

Интеграция Hibernate (с версии 1.6)

LiquiBase-Hibernate является заменой функциональности hbm2ddl Hibernate.

Преимущества LiquiBase по сравнению с hbm2ddl

Хотя hbm2ddl работает в целом, это в основном инструмент сравнения баз данных и, следовательно, имеет все проблемы, связанные с инструментами сравнения баз данных.

LiquiBase-Интеграция Hibernate записывает изменения базы данных, требуемые вашим текущим отображением Hibernate, в файл журнала изменений, который вы можете затем проверить и изменить по мере необходимости перед выполнением.Процесс разработки

Использование Hibernate с LiquiBase состоит из следующих шагов:

  1. Внесите необходимые изменения в объекты, отображенные в Hibernate
  2. Запустите diffChangeLog между вашим файлом конфигурации Hibernate иваша база данных разработки (см. примеры ниже)
  3. Проверка и изменение новых наборов изменений (при необходимости)
  4. Обновление базы данных новыми изменениями

ИВы можете либо предоставить скрипт SQL для всей поддерживаемой базы данных, либо просто обернуть инструмент в какую-нибудь сборку Ant.

Это также возможность использовать такой инструмент в вашем процессе разработки.

0 голосов
/ 27 августа 2010

Я бы сначала порекомендовал взглянуть на dbMigrate и liquiBase и, возможно, также dbMaintain .

. Эти библиотеки, инструменты предназначены для сборкисделать миграцию схемы.Они используют разные подходы.

Они могут быть частью вашего решения или даже сами по себе достаточны.

...