如何使用service.xml或Service Builder设置字符串列的大小?

Mar*_*ark 9 size service liferay

前历史:我data exception: string data, right truncation在更新实体时遇到JDBCExceptionReporter 异常.

我发现这意味着,数据对于指定来说太大了varchar.

service.xml列中指定如下:

<column name="message" type="String"/>
Run Code Online (Sandbox Code Playgroud)

我在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");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如何max-length为我的列定义?

Jon*_*nny 23

您需要修改您portlet-model-hints.xml应该在以下位置找到的文件:

docroot/WEB-INF/src/META-INF/portlet-model-hints.xml
Run Code Online (Sandbox Code Playgroud)

在这里,您可以定义以下hint值:

<hint-collection name="TEXTAREA">
    <hint name="max-length">500</hint>
</hint-collection>
Run Code Online (Sandbox Code Playgroud)

然后hint在同一个文件中找到要应用它的列,它应如下所示:

<field name="your_column_name" type="String">
    <hint-collection name="TEXTAREA" />
</field>
Run Code Online (Sandbox Code Playgroud)

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

<field name="your_column_name" type="String">
    <hint name="max-length">500</hint>
</field>
Run Code Online (Sandbox Code Playgroud)

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

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

还有其他hints一个列表可以在这个维基中找到,我刚刚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>
Run Code Online (Sandbox Code Playgroud)