Подтвердить что ты не робот

Обновить схему базы данных с помощью спящего режима

<property name="hibernate.hbm2ddl.auto">update</property>

Я могу создать мою схему базы данных, она автоматически добавит свойства, ограничение, ключ и т.д.... Но как насчет UPDATE схемы базы данных? Если я удалю какое-либо свойство из своих сущностей, hibernate не удалит его, или если я изменил какое-то ограничение, спящий режим не коснется уже созданного ограничения...

Итак, есть способ сделать hibernate действительно обновить схему базы данных?

Спасибо.

4b9b3361

Ответ 1

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

  • Нам пришлось добавить проверки непустых свойств. Это включает в себя выпуск инструкции UPDATE для данных, где это возможно, для исключения нулей, что приводит к следующей точке значений по умолчанию.
  • Нам пришлось добавлять проверки значений столбцов по умолчанию. Значения по умолчанию выводятся по нулевому значению столбца и его типа данных. Примитивы всегда инициализируются нулевым или ложным, но не нулевым перечислением до его первого значения перечисления, но для других объектов script необходимо изменить вручную.
  • Мы даже добавили поддержку для изменения размеров столбцов varchar, поскольку были случаи, когда длина столбца базы данных и @Column(length) отличались.

Но для того, чтобы собрать все вместе, невозможно создать полный инструмент таким образом, потому что, если столбец переименован в код? Что делать, если тип изменяется автоматически, а не автоматически (bool to date?). Если у вас нет доступа к истории рефакторинга, вы не можете всегда распространять изменения.

Ответ 2

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

Ответ 3

Нет, нет. hbm2ddl не предназначен для полного управления миграциями вашей схемы. Это лучше всего, если вы используете его только для аддитивных изменений в вашей схеме и вручную редактировать (сгенерированные скрипты) для чего-либо еще.

Ответ 4

Некоторые проекты, которые могут быть полезны для управления изменениями схемы:

  • mybatis (1049 вопросов, отмеченных на SOW)
  • Liquibase (663 вопроса помечены как SOW)
  • Flyway (400 вопросов, отмеченных на SOW)

Другим ресурсом, который вы можете найти полезным, является сравнение возможностей на веб-сайте Flyway (здесь упоминаются другие связанные проекты).

Ответ 5

Hibernate предоставляет класс SchemaUpdate, который способен синхронизировать набор сопоставлений спящего режима со схемой базы данных

Старый пост, но пусть сообщество знает, хорошо ли это:)