| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > hibernate: автообновление схемы |
| Автор: 3,14 5.10.2011, 13:59 |
| Есть набор классов, которые через JPA мапятся на базу. Если с созданием таблиц проблем нет, то вот с изменением имеющихся существуют определенные сложности. За это отвечает параметр: hbm2ddl.auto Значения create и create-drop не подходят, так как в базе есть данные. При значении update он делает далеко не все возможные изменения, например не меняет тип столбца и не удаляет столбцы, даже если таблица пустая. Вроде проблема стандартная, но стандартного решения я для нее не нашел. Пока есть только идея убивать все пустые таблицы перед подключением и использовать значение update, что во многом бы решило бы проблему, но как то это криво, приделывать такие костыли. Кто уже сталкивался с таким и что придумал? |
| Автор: Samotnik 5.10.2011, 20:18 |
| Да, проблема стара как мир Тоже сталкивался и тоже решения не нашёл. Потом прикинул, что в принципе решение и вряд ли найдётся. Например была таблица Car с полями id, brand,color. Ты, допустим добавил поле productionDate и сделал его not null. Как в таком случае hibernate должен поступить со старыми записями с базе ? Решил юзать hibernate.hbm2ddl.auto=update, и дропать базу, в случае, если хибер не может обновить схемы. Предварительно делаю дамп, затем "в ручную" создаю нужные таблицы Тоже интересно послушать кто как эту проблему решил. |
| Автор: Farmazon 5.10.2011, 21:30 |
| Ручками можно базу поправить... ALTER никто не отменял. |
| Автор: Stolzen 11.10.2011, 12:22 |
| Использовать системы миграции типа http://liquibase.org/ (Правда признаюсь честно что вместе с хибом не пробовал такое использовать, в питоне использовал south - отличная штука) |