Liferay ServiceBuilder不会改变表格

时间:2014-04-04 11:25:09

标签: sql maven liferay alter

短篇小说

当我修改服务构建器生成的tables.sql(VARCHAR(4000))中的列时,重新部署portlet不会导致Liferay更改db表。如何确保列扩展?

长篇故事

我必须对另一个承包商开发的Liferay 6.1.20 EE GA2项目进行一些更改。该项目使用maven作为构建工具。

在向service.xml添加一些列并运行mvn liferay:build-service之后,我注意到portlet-model-hints.xml已被覆盖(请参阅https://issues.liferay.com/browse/MAVEN-37)并重置为默认列宽。

表中有很多数据(它在生产模式下运行),所以我不能简单地删除并重新创建表。

因此,我手动修改了生成的tables.sql中的列宽,并重新部署了portlet。新列现在存在于db表中,但列宽未被更改。

Liferay是否会改变列宽或是否必须手动对数据库发出一些sql语句?

(我们正在使用oracle 10g数据库)

2 个答案:

答案 0 :(得分:0)

如果要更改列withs,则需要在portlet-model-hints.xml中写入。 例如,要将字段增加到255,您将执行以下操作:(重要的是在更改后运行构建服务。)

enter image description here

答案 1 :(得分:0)

ServiceBuilder本身不会ALTER TABLE - 您必须自己编写一个UpgradeProcess。检查this blog post或基础文档。

简而言之:始终可以自动完成的更新属于" DROP TABLE - CREATE TABLE",但正如您所说,这通常是不可取的。任何更奇特的方式都需要手动完成,这正是这种机制的用途。