9

史前:更新实体时出现 JDBCExceptionReporterdata exception: string data, right truncation异常。

我发现这意味着数据对于指定的varchar.

service.xml列中指定如下:

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

我在 Liferay 的源代码中找到了ServiceBuilder这个片段:

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>

或者你也可以直接这样写,如果只有一列具有指定的提示max-length

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

然后您需要build-service再次运行,并且当您部署您的 portlet 时,您的数据库表应该被更新以反映此更改。

我希望这回答了你的问题!

还有其他hints的,可以在这个wiki中找到一个列表,我只是max-length在这里展示,因为这听起来像是你需要的。

如果你有一张表,一列,完整的文件将如下所示。你的很可能会更长!

<?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 回答