Liferay 服务更新

Liferay service update

我有以下 service.xml:

    <!-- PK fields -->
    <column name="id" type="long"  primary="true"/>

    <!-- Group instance -->

    <!-- <column name="groupId" type="long" /> -->

    <!-- Certificate fields -->

    <column name="version" type="int" />
    <column name="subject" type="String" />
    <column name="serial" type="String" />
    <column name="encoded" type="Blob" />
    <column name="to_auth" type="boolean" />
    <column name="to_sign" type="boolean" />
    <column name="ins_date" type="Date" />
    <column name="alt_date" type="Date" />
    <column name="requests" type="Collection" entity="APPLET_REQUEST"/>
    <column name="user_certifcates" type="Collection" entity="USER_CERTIFICATE"/>
    <!-- Order -->

    <order by="asc">
        <order-column name="id" />
    </order>

    <!-- Finder methods: TODO: gets dos campos que pretendo -->

    <finder name="id" return-type="Collection">
        <finder-column name="id" />
    </finder>
</entity>

    <!-- PK fields -->
    <column name="userid" type="long"  primary="true"/>
    <column name="companyid" type="long"  primary="true"/>
    <column name="certificateid" type="long" primary="true"/>

    <!-- Group instance -->

    <!-- <column name="groupId" type="long" /> -->

    <!-- User_Certificate fields -->

    <!-- Order -->

    <order by="asc">
        <order-column name="userid" />
    </order>

    <finder name="userid" return-type="Collection">
        <finder-column name="userid" />
    </finder>
</entity>

我用第一个实体部署了服务,没有出现问题。当我插入第二个实体并部署服务时,liferay 显示下一条错误消息:

Caused by: com.liferay.portal.kernel.upgrade.UpgradeException: Upgrade code using unsupported class type 2004

我该如何解决这个问题?

承认,Liferay 的错误信息是——好吧——不是很有帮助。我已提交 LPS-57190 以在将来更改此设置。票证中已经提到了相关的代码更改。到目前为止,如果您查看我针对此问题触及的代码,您会发现 2004 是 ServiceBuilder 尝试更新的列之一的 SQL 类型。这个数字来自 java.sql.Types。检查 class,它是 BLOB - 所以似乎 SB 在升级您的 BLOB 列时遇到了一些问题。

您可以(并且应该)编写自己的升级代码,以明确处理 Liferay 无法自行完成的事情。 Liferay 本身带有很多 UpgradeActions,它们会在安装新版本时改变数据库。升级 table 的标准操作(例如描述的 in this thread)并不总是您想要的。

以下是防止 Liferay automatically upgrading your tables 的方法 - 查看 UpgradeAction 并让 Liferay 知道您已自行升级到所需的新 table 结构。