Hibernate: добавление контроля версий в базу данных без контроля версий - PullRequest
1 голос
/ 26 января 2011

Я создал базу данных некоторое время назад, используя hibernate (JPA), однако я не включил поля @version ни для каких сущностей. Оказывается, этот проект стал чем-то важным, и теперь мне нужно использовать управление версиями (управление версиями с оптимистической блокировкой).

Я знаю, что мне нужно добавить новое свойство (поле) для каждой отдельной сущности с аннотацией @version.

Вопрос: Кто-нибудь знает, как я могу обновить реальную БД (mysql), чтобы включить столбцы версий без потери данных и слишком много работы?

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 21 марта 2011

в Oracle DDL это будет alter table xyz add ( version NUMBER default 1 not null );

3 голосов
/ 26 января 2011

Создайте оператор SQL, который создает столбец для таблиц всех сущностей, которые вы хотите, и атрибут @Version. Затем используйте другой запрос, чтобы установить значение этого столбца для всех строк равным 1.

Немного другим способом является создание столбца со значением по умолчанию, а затем удаление по умолчанию. (Работает для MYSQL)

ALTER TABLE xyz ADD version integer NOT NULL DEFAULT 1;
ALTER TABLE xyz CHANGE version version integer NOT NULL;

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

...