Вопрос

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

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

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

Спасибо.

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

  • mybatis (1049 вопросов с меткой на сева)
  • Ликвибаза (663 вопроса с меткой на свиноме)
  • Пролет (400 вопросов с меткой на сева)

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top