我有以下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
我该如何解决这个问题?
答案 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知道您自己升级到新的必需表格结构。