Подтвердить что ты не робот

Рекомендации по генерации схемы спящего режима /JPA DB

Я просто хотел услышать мнение экспертов Hibernate о лучших методах генерации схемы DB для проектов на базе Hibernate/JPA. Особенно:

  • Какую стратегию использовать, когда проект только что начался? Рекомендуется ли Hibernate автоматически генерировать схему на этом этапе или лучше создавать таблицы базы данных вручную с самых ранних этапов проекта?

  • Притворившись, что на протяжении всего проекта была сгенерирована схема с использованием Hibernate, лучше ли отключать автоматическое создание схемы и вручную создавать схему базы данных непосредственно перед выпуском системы в производство?

  • И после того, как система была выпущена в производство, что лучше всего подходит для поддержки классов сущностей и схемы БД (например, добавление/переименование/обновление столбцов, переименование таблиц и т.д.)?

4b9b3361

Ответ 1

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

  • В продуктах всегда лучше всего вручную создавать и просматривать схему.

  • Вы делаете обновление для сущности и создаете соответствующее обновление script (ревизия), чтобы обновить схему базы данных, чтобы отразить изменение сущности. Вы можете создать собственное решение (я написал несколько) или использовать что-то более популярное, например, Liquibase (оно даже поддерживает откаты изменений схемы). Если вы используете инструмент построения, такой как maven или ant, рекомендуется подключить утилиту db schema update в процессе сборки, чтобы свежие сборки оставались в синхронизации со схемой.

Ответ 2

Хотя спорно, я бы сказал, что ответ на все 3 вопросов:. Пусть спящий режим автоматически генерировать таблицы в схеме

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

Для развертывания на производстве - очевидный совет - сначала убедитесь, что все создано ОК в тестовой среде, а затем развернуто на производстве.

Ответ 3

Вручную, потому что:

  • Такая же база данных может использоваться различными приложениями, и не все они будут использовать спящий режим или даже java. Схема базы данных должна не должен быть продиктован ORM, он должен быть разработан вокруг данных и бизнес-требований.
  • Типы данных, выбранные спящим режимом, могут быть не лучше всего подходят для приложения.
  • Как упоминалось в предыдущем комментарии, изменения в объектах потребуют ручного вмешательства, если потеря данных неприемлема.
  • Такие вещи, как дополнительные свойства (общий термин не java   свойства) на таблицах соединений прекрасно работают в СУБД, но       несколько сложный и неэффективный для использования в ОРМ. Выполнение такого       отображение из ORM → RDBMS может создавать таблицы, которые не являются       эффективный. Теоретически можно построить точное соединение       таблицу с использованием спящего сгенерированного кода, но для этого потребуется       особенно при записи объектов.

Я бы использовал автоматическую генерацию для автономных приложений или баз данных, к которым можно получить доступ через один и тот же уровень ORM, а также, если приложение нужно портировать в разные базы данных. Это позволило бы сэкономить много времени, не требуя, чтобы один записывал и поддерживал специфические DDL-скрипты поставщика DB.

Ответ 4

Как сказал Божидар, не позволяйте Hibernate создавать и обновлять схему базы данных. Пусть ваше приложение создает и обновляет схему базы данных. Для java лучшим инструментом для этого является Flyway. Вам необходимо создать один или несколько файлов SQL с операторами DDL, которые описывают вашу схему базы данных. Эти SQL файлы затем выполняются Flyway. Для получения дополнительной информации см. Сайт Flyway.

Ответ 5

Я считаю, что многое из того, что обсуждаются или обсуждаются здесь, также должно быть связано с тем, что вы более комфортно с использованием кода или первого подхода к базе данных.

Лично я больше намерен пойти на последнее, и, ссылаясь на принцип единой ответственности (SRP), я предпочитаю, чтобы специалист по БД обрабатывал БД и специалист приложения, обрабатывающий приложение, чем приложение, обрабатывающее БД. Кроме того, я придерживаюсь мнения, что слишком много ярлыков будут работать отлично в начале, но создадут неуправляемые проблемы по мере роста/развития вещей.