Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > hibernate: автообновление схемы


Автор: 3,14 5.10.2011, 13:59
Есть набор классов, которые через JPA мапятся на базу. Если с созданием таблиц проблем нет, то вот с изменением имеющихся существуют определенные сложности. За это отвечает параметр:
hbm2ddl.auto
Значения create и create-drop не подходят, так как в базе есть данные.
При значении update он делает далеко не все возможные изменения, например не меняет тип столбца и не удаляет столбцы, даже если таблица пустая.
Вроде проблема стандартная, но стандартного решения я для нее не нашел. Пока есть только идея убивать все пустые таблицы перед подключением и использовать значение update, что во многом бы решило бы проблему, но как то это криво, приделывать такие костыли.

Кто уже сталкивался с таким и что придумал? smile

Автор: Samotnik 5.10.2011, 20:18
Да, проблема стара как мир smile 
Тоже сталкивался и тоже решения не нашёл. Потом прикинул, что в принципе решение и вряд ли найдётся. Например была таблица Car с полями id, brand,color. Ты, допустим добавил поле productionDate и сделал его not null. 
Как в таком случае hibernate должен поступить со старыми записями с базе ? smile
Решил юзать hibernate.hbm2ddl.auto=update, и дропать базу, в случае, если хибер не может обновить схемы. Предварительно делаю дамп, затем "в ручную" создаю нужные таблицы

Тоже интересно послушать кто как эту проблему решил.

Автор: Farmazon 5.10.2011, 21:30
Ручками можно базу поправить... ALTER никто не отменял.

Автор: 3,14 6.10.2011, 13:34
Цитата(Samotnik @  5.10.2011,  20:18 Найти цитируемый пост)
 Например была таблица Car с полями id, brand,color. Ты, допустим добавил поле productionDate и сделал его not null. 
Как в таком случае hibernate должен поступить со старыми записями с базе ?

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


Цитата(Farmazon @  5.10.2011,  21:30 Найти цитируемый пост)
Ручками можно базу поправить... ALTER никто не отменял. 

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

Автор: Stolzen 11.10.2011, 12:22
Использовать системы миграции типа http://liquibase.org/ (Правда признаюсь честно что вместе с хибом не пробовал такое использовать, в питоне использовал south - отличная штука)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)