Вопрос-ответ

What are the possible values of the Hibernate hbm2ddl.auto configuration and what do they do

Каковы возможные значения конфигурации Hibernate hbm2ddl.auto и что они делают

Я действительно хочу узнать больше об обновлении, экспорте и значениях, которые могут быть предоставлены hibernate.hbm2ddl.auto
Мне нужно знать, когда использовать обновление, а когда нет? И какова альтернатива?

Это изменения, которые могут произойти через DB:


  • новые таблицы

  • новые столбцы в старых таблицах

  • удаленные столбцы

  • изменен тип данных столбца

  • тип столбца изменил свои атрибуты

  • удаленные таблицы

  • изменены значения столбца

В каждом конкретном случае какое решение является наилучшим?

Переведено автоматически
Ответ 1

Из документации сообщества:


hibernate.hbm2ddl.auto Автоматически проверяет или экспортирует DDL схемы в базу данных при создании SessionFactory. С помощью create-drop схема базы данных будет удалена, когда SessionFactory будет явно закрыт.


например, проверка | обновление | создание | create-drop


Итак, список возможных вариантов таков,


  • validate: проверяет схему, не вносит изменений в базу данных.

  • только для создания: будет сгенерировано создание базы данных.

  • удаление: будет сгенерировано удаление базы данных.

  • обновление: обновите схему.

  • создать: создает схему, уничтожая предыдущие данные.

  • create-drop: удаление схемы при явном закрытии SessionFactory, обычно при остановке приложения.

  • нет: ничего не делает со схемой, не вносит изменений в базу данных

Эти параметры, похоже, предназначены для инструментов разработчика, а не для облегчения работы с базами данных производственного уровня, возможно, вы захотите взглянуть на следующий вопрос; Hibernate: hbm2ddl.auto = обновление в производстве?

Ответ 2

Также есть значение none, чтобы полностью отключить его.

Ответ 3

The configuration property is called hibernate.hbm2ddl.auto

In our development environment we set hibernate.hbm2ddl.auto=create-drop to drop and create a clean database each time we deploy, so that our database is in a known state.

In theory, you can set hibernate.hbm2ddl.auto=update to update your database with changes to your model, but I would not trust that on a production database. An earlier version of the documentation said that this was experimental, at least; I do not know the current status.

Therefore, for our production database, do not set hibernate.hbm2ddl.auto - the default is to make no database changes. Instead, we manually create an SQL DDL update script that applies changes from one version to the next.

Ответ 4

First, the possible values for the hbm2ddl configuration property are the following ones:


  • none - No action is performed. The schema will not be generated.

  • create-only - The database schema will be generated.

  • drop - The database schema will be dropped.

  • create - The database schema will be dropped and created afterward.

  • create-drop - The database schema will be dropped and created afterward. Upon closing the SessionFactory, the database schema will be dropped.

  • validate - The database schema will be validated using the entity mappings.

  • update - The database schema will be updated by comparing the existing database schema with the entity mappings.

The hibernate.hbm2ddl.auto="update" is convenient but less flexible if you plan on adding functions or executing some custom scripts.

So, The most flexible approach is to use Flyway.

However, even if you use Flyway, you can still generate the initial migration script using hbm2ddl.

java hibernate