2011-01-01 3 views
12
<property name="hibernate.hbm2ddl.auto">update</property> 

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

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

Спасибо.

ответ

6

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

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

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

3

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

1

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

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

5

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

+0

Что вы подразумеваете под термином «жидкость» - это база данных агностик? Я попытался запустить набор изменений Liquibase, сгенерированный на одной РСУБД, на другой СУБД (т. Е. Программе базы данных), и это не сработало. – Fletch

+2

Fletch - Я использовал его в течение многих лет, и он не является агностиком, но если вы жестко задаете свой конкретному дБ, тогда этого не будет. Попробуйте использовать узлы xml, такие как ... тогда он будет переводиться для вас. – csharp4me

2

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

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

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

Смежные вопросы