Liferay服务更新

时间:2015-07-16 17:02:42

标签: liferay liferay-service-builder

我有以下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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

承认,Liferay的错误信息是 - 好 - 不是非常有用。我已经提交LPS-57190以便将来更改此内容。票证中已经提到了相关的代码更改。截至目前,如果您查看我为此问题触及的代码,您将看到2004是ServiceBuilder尝试更新的其中一列的SQL类型。此编号来自java.sql.Types。检查那个类,它是BLOB - 所以看起来SB在升级你的BLOB列时遇到了一些问题。

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

以下是如何防止Liferay automatically upgrading your tables - 查找UpgradeAction并让Liferay知道您自己升级到新的必需表格结构。