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>

最初のエンティティでサービスをデプロイしましたが、問題は発生しませんでした。2 番目のエンティティを挿入してサービスをデプロイすると、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 が更新しようとする列の 1 つの SQL タイプであることがわかります。この番号は java.sql.Types からのものです。そのクラスを調べると、それは BLOB です。そのため、SB には BLOB 列のアップグレードに問題があるようです。

Liferay 自体ができないことを明示的に処理するために、独自のアップグレード コードを作成できます (作成する必要があります)。Liferay 自体にはUpgradeAction、新しいリリースのインストール時にデータベースを変更する非常に多くの が付属しています。テーブルをアップグレードする標準的な操作 (たとえば、このスレッドで説明されています) は、必ずしも必要なものではありません。

Liferay がテーブルを自動的にアップグレードしないようにする方法は次のとおりです。UpgradeAction を調べて、必要な新しいテーブル構造に自分でアップグレードしたことを Liferay に知らせてください。

于 2015-07-17T07:27:18.143 に答える