9

以前の履歴: エンティティの更新時に JDBCExceptionReporterdata exception: string data, right truncation例外が発生します。

これは、指定された に対してデータが大きすぎることを意味することがわかりましたvarchar

service.xml列には次のように指定されています。

<column name="message" type="String"/>

ServiceBuilderこのフラグメントのLiferayのソースコードで見つけました:

else if (colType.equals("String")) {
    Map<String, String> hints = ModelHintsUtil.getHints(
        _packagePath + ".model." + entity.getName(), colName);

    int maxLength = 75;

    if (hints != null) {
        maxLength = GetterUtil.getInteger(
            hints.get("max-length"), maxLength);
    }

    if (col.isLocalized()) {
        maxLength = 4000;
    }

    if (maxLength < 4000) {
        sb.append("VARCHAR(" + maxLength + ")");
    }
    else if (maxLength == 4000) {
        sb.append("STRING");
    }
    else if (maxLength > 4000) {
        sb.append("TEXT");
    }
}

今私の質問は、どうすれmax-lengthば自分の列に を定義できますか?

4

1 に答える 1

24

portlet-model-hints.xml次の場所にあるファイルを変更する必要があります。

docroot/WEB-INF/src/META-INF/portlet-model-hints.xml

hintここでは、次のような値を定義できます。

<hint-collection name="TEXTAREA">
    <hint name="max-length">500</hint>
</hint-collection>

hint次に、これを適用する列を同じファイルで見つけます。次のようになります。

<field name="your_column_name" type="String">
    <hint-collection name="TEXTAREA" />
</field>

または、次のように指定されたヒントを持つ列が 1 つしかない場合は、次のように直接記述することもできますmax-length

<field name="your_column_name" type="String">
    <hint name="max-length">500</hint>
</field>

次に、再度実行する必要がありbuild-serviceます。ポートレットをデプロイするときに、この変更を反映するように DB テーブルを更新する必要があります。

これがあなたの質問に答えてくれることを願っています!

hintsにもリストがあり、このwikimax-lengthで見つけることができます。必要なもののように聞こえるので、ここに示しました。

1 つの列を持つ 1 つのテーブルがある場合、完全なファイルは次のようになります。あなたのものはおそらくもっと長くなるでしょう!

<?xml version="1.0"?>
<model-hints>
    <hint-collection name="TEXTAREA">
        <hint name="max-length">500</hint>
    </hint-collection>
    <model name="com.mynamespace.model.MyModelClass">
        <field name="myColumn" type="String">
            <hint-collection name="TEXTAREA" />
        </field>
    </model>
</model-hints>
于 2012-08-16T19:08:26.747 に答える