Поддержка JPA / Hibernate для миграции?
в настоящее время я работаю над настольным приложением, использующим JPA/Hibernate для сохранения данных в базе данных H2. Мне любопытно, каковы мои варианты, если мне по какой-то причине нужно внести изменения в схему базы данных в будущем. Возможно, мне придется ввести новые сущности, удалить их или просто изменить типы свойств в сущности.
- есть ли поддержка в JPA/Hibernate для этого?
- должен ли я вручную написать сценарий решения?
3 ответов
Я обычно позволяю Hibernate генерировать DDL во время разработки, а затем создавать сценарий ручной миграции SQL при развертывании на тестовом сервере (который я позже использую для UAT и живых серверов).
генерация DDL в спящем режиме не поддерживает миграцию данных вообще, если вы только добавляете ненулевое поле, генерация DDL не может вам помочь.
Мне еще предстоит найти действительно полезную абстракцию миграции, чтобы помочь с этот.
существует несколько библиотек (посмотрите на это так вопрос для примеров), но когда вы делаете что-то вроде разделения существующего объекта на иерархию с использованием объединенного наследования, вы всегда возвращаетесь к простому SQL.
возможно, мне придется ввести новые сущности, удалить их или просто изменить типы свойств в сущности.
у меня нет опыта работы с ним, но Liquibase предоставляет некоторые Интеграция Hibernate и может сравнить ваши сопоставления с базой данных и создать соответствующий журнал изменений:
интеграция LiquiBase-Hibernate записывает изменения базы данных, необходимые для текущего сопоставления Hibernate с a изменить файл журнала который вы можете проверить и изменить по мере необходимости перед выполнением.
все еще ищете возможность поиграть с ним и найти ответы на мои нерешенные вопросы:
- работает ли он при использовании аннотаций?
- не требуется
hibernate.cfg.xml
файл (хотя это не было бы большим препятствием)?
обновление: ОК, оба вопроса покрываются Нейтан Voxland в этот ответ и ответы на них:
- да он работает при использовании аннотаций
- да требуются гибернации.контекстно-свободная грамматика.xml (на данный момент)
есть два варианта:
- db-to - hibernate-зеркальные изменения DB для ваших объектов вручную. Это означает, что ваша БД "лидирует"
- hibernate-to-db-либо использовать
hibernate.hbm2ddl.auto=update
, или вручную измените БД после изменения вашей сущности-здесь ваша объектная модель "ведущая"