Как создать схему базы данных в спящем режиме в первый раз и затем обновить ее в случае изменения схемы? - PullRequest
16 голосов
/ 11 января 2012

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

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

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

Ответы [ 3 ]

29 голосов
/ 08 ноября 2013

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

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

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

См. Некоторые из моих наблюдений

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

Вы можете использовать '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 создает новую базу данных.

1 голос
/ 11 января 2012

Я бы не рекомендовал обновлять схему БД на основе изменений сущности. Попробуйте пойти с Flyway или Liquibase . Вы можете найти похожие вопросы по stackoverflow, например. Рекомендации по созданию схемы БД Hibernate / JPA

...