Есть ли проблема с жидкой фазой в hibernate hbm2ddl? - PullRequest
4 голосов
/ 19 августа 2010

У меня небольшая проблема с liquibase и hibernate. Я ожидаю, что hibernate создаст схему, когда hbm2ddl настроен на создание, а затем заставит liquibase собрать базу данных с помощью файла сценария sql.
Я заметил, чтопри проверке он ведет себя так, как описано, а при создании - нет. Особенно в среде тестирования при использовании hsqldb (в памяти). Тогда я, похоже, слеп.

есть ли способ получить мои ожидаемые работы с hsqldb, как при заполнении базы данных после ее создания с помощью hibernate.спасибо, что прочитали это.

1 Ответ

4 голосов
/ 21 августа 2010

Liquibase лучше всего использовать в качестве замены для hbm2ddl.Таким образом, вы можете получить заполнение данных, когда база данных находится в состоянии, которое соответствует этим данным, и более поздние наборы изменений могут обновить вставленные данные вместе с другими изменениями.Если вы сначала запустите hbm2ddl, а затем liquibase, чтобы заполнить данные, вам всегда нужно будет вносить изменения в структуру данных вставки.

Один из способов использовать hibernate и liquibase - это использовать инструмент liquibase diff в antили maven во время разработки для добавления в файл изменений на основе различий между вашей базой данных и вашей моделью гибернации.Убедитесь, что вы проверяете, что он пытается сделать, поскольку это не всегда то, что вы ожидаете (он решает удалить столбец и добавить столбец вместо его переименования).Как только ваш файл журнала изменений был создан, вы можете запустить его, как и любой файл журнала изменений, передав, например, пружинный компонент liquibase при запуске приложения.Вам не нужно использовать как hbm2ddl, так и liquibase, так как liquibase использует hbm2ddl для создания «базы данных» гибернации, с которой liquibase сравнивает вашу текущую базу данных.

При этом ваши шаги:

  1. Внесение изменений в вашу модель гибернации
  2. Запуск разницы в liquibase между hibernate и существующей базой данных
  3. Проверка новых наборов изменений в liquibase
  4. Выполнение сценария liquibase для базы данных

Единственная проблема может заключаться в том, что hibernate diff tool может не поддерживаться в maven, как в ant и командной строке, особенно в 1.9.

Если вы не хотите иметь дело с утилитой liquibase diff, вы всегда можете добавить changeSets в файл журнала изменений для каждого изменения вручную.Формат XML разработан так, чтобы с ним было легко работать вручную.В этом случае вы должны выполнить следующие действия:

  1. Внести изменения в модель гибернации
  2. Добавить необходимые изменения в свой файл журнала изменений
  3. Выполнить сценарий liquibase для базы данных
  4. Проверка и повтор
...