Вопрос

После прочтения Hibernate: hbm2ddl.auto = update in production? возникли некоторые вопросы , Прежде всего, причина, по которой я использую Hibernate, заключается в том, чтобы быть независимым от поставщика базы данных (не нужно писать 10 версий одного и того же SQL-запроса, например, tsql против sql).

Моя проблема возникает, когда пришло время создавать схемы базы данных (производственная среда). Насколько я вижу, у меня есть две альтернативы.

<Ол>
  • hbm2dll = update
  • чистые сценарии sql (ddl).
  • Первая альтернатива широко обсуждается в ветке выше. Второй вариант плох, потому что это означает, что я вернулся к своей первой проблеме: «Не хочу создавать операторы SQL, которые зависят от поставщика базы данных». (Это утверждение может быть ложным, если «все» (по крайней мере, поддержка Hibernate для баз данных) реализует DDL (Подмножество SQL используется для определения и изучения структуры базы данных.) равно).

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

    Решение

    Вносите все изменения в режим разработки / подготовки, а также переносите и выполняйте сценарии в производственном режиме вручную (или автоматически, но не позволяйте Hibernate их запускать). Сценарии могут нуждаться в некоторой настройке, поскольку обновление hbm2ddl охватывает не все случаи.

    На самом деле я никогда не позволял hibernate запускать ddl для любой базы данных. Я использую hbm2ddl для генерации текста:

    org.hibernate.tool.hbm2ddl.SchemaExport --config=hibernate.cfg.xml --text --format --delimiter=;
    
    org.hibernate.tool.hbm2ddl.SchemaUpdate --config=hibernate.cfg.xml --text --format --delimiter=;
    

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

    Обычно инструменты, которые выводят схему JPA, основаны на инструменте SchemaExport , который читает только статические метаданные.

    Существует плагин Maven / Gradle, https://github.com/Devskiller/jpa2ddl генерирует схему JPA. Включает в себя все свойства, стратегии именования, типы пользователей и т. Д.

    Вы также можете использовать его для создания автоматических миграций схемы для Flyway .

    Мне нравится Hibernate (LOT), и я думаю, что он делает какой-то невероятно качественный код, но я бы не отказался от его использования в производственной базе данных, как бы позволил нянчиться с очень хорошо воспитанным медведем-гризли. Некоторое время все может пойти хорошо, но один случай, когда все идет плохо, это ДЕЙСТВИТЕЛЬНО плохо.

    Мое предложение было бы в тестовой среде, чтобы Hibernate генерировал схемы базы данных. Протестируйте их в тестовой среде. Затем перенесите эти сценарии в производственную среду и запустите их. Обратите внимание на специфику там; даже если тесты пройдут фантастически, я ВСЕ ЕЩЕ не позволю Hibernate сойти с ума на рабочем сервере. Возьмите выходные данные схемы Hibernate, протестируйте их и после проверки подтвердите их на рабочем сервере.

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