Обновление базы данных

Liferay сервисы поддерживают версионность базы данных. Другими словами, в зависиммости от описанных в service.xml сущностей, будут созданы соответствующие таблицы в базе данных и будет сохранена версия этих таблиц на момент создания. При последующем изменениии сущностей, пересборке и развертывании сервисов произойдет автоматическое обновления соответствующих таблиц. Это удобный и легкий способ создания и поддержки слоя для работы с базой данных, но также существуют и некоторые недостатки.

Предмет обновления зависит от того, что было изменено от версии к версии. Добавление новых колонок, удаление или модификация существующих происходит просто и почти без ошибок. А вот переименование колонки влечет за собой ее удаление и создание новой, при этом данные теряются навсегда.

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

Также могут возникнуть проблемы, если структуру базы надо обновить на этапе сборки проекта. В этом случае будут недоступны изменения, которые автоматически появятся после развертывания. Как выход можно отключить автообновление структуры. Для этого надо создать файл service-ext.properties в той же директории что и service.properties файл, и переопределить следующий параметр:
build.auto.upgrade=false