Обновить схему базы данных с помощью спящего режима
<property name="hibernate.hbm2ddl.auto">update</property>
Я могу создать мою схему базы данных, она автоматически добавит свойства, ограничение, ключ и т.д....
Но как насчет UPDATE схемы базы данных?
Если я удалю какое-либо свойство из своих сущностей, hibernate не удалит его, или если я изменил какое-то ограничение, спящий режим не коснется уже созданного ограничения...
Итак, есть способ сделать hibernate действительно обновить схему базы данных?
Спасибо.
Ответы
Ответ 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, который способен синхронизировать набор сопоставлений спящего режима со схемой базы данных
Старый пост, но пусть сообщество знает, хорошо ли это:)