1

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

我怎么解决这个问题?

4

1 回答 1

2

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

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

以下是如何防止 Liferay自动升级您的表格- 查找 UpgradeAction 并让 Liferay 知道您自己升级到了新的所需表格结构。

于 2015-07-17T07:27:18.143 回答