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

Как создать схему базы данных в спящем режиме в первый раз и продолжить ее обновление в случае изменения схемы?

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

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

Есть ли какое-либо значение, которое может выполнять оба?

4b9b3361

Ответ 1

На самом деле, я только что проверил <property name="hibernate.hbm2ddl.auto" value="update" />, даже создавая таблицы в первый раз, а затем позже, если существует таблица/схема, она обновляется.

Update свойство применимо при запуске или добавлении новой модели. Вы хотите сохранить ранее сохраненные экземпляры сущностей. Это стиль создания схемы по умолчанию.

Он пытается обновить схему, если это необходимо. Поддерживаются следующие обновления:

См. некоторые мои наблюдения

  • Добавить поле. В таблицу добавляется новый столбец.
  • Переименуйте поле - новый столбец добавляется в таблицу, а исходный столбец остается, но больше не используется. Примечание. Данные из старого столбца не переносятся в новый столбец.
  • Удалить поле. Столбец остается, но не используется.
  • Изменить тип поля. Тип столбца не изменяется, что может привести к исключениям типа-несоответствия.
  • Создать объект - создает новую таблицу.
  • Переименовать сущность - создает новую таблицу, а исходная таблица остается.
  • Переместить объект в другую папку. Создает новую таблицу, в то время как исходная таблица остается.
  • Удалить объект - таблица остается.

Ответ 2

Вы можете использовать 'import.sql'.

Добавьте файл import.sql в ресурс следующим образом:

/*create database at first time*/ 
CREATE SCHEMA your-database-name;

и добавьте строку в 'hibernate.cfg.xml' следующим образом:

<hibernate-configuration>
    <session-factory>
       ...
       ...
       <property name="hbm2ddl.import_files">import.sql</property>
       ...
       ...
    </session-factory>
</hibernate-configuration>

Итак, если не существует базы данных, hibernate создает новый db.