前历史记录:我在更新实体时遇到JDBCExceptionReporter data 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
?
答案 0 :(得分:23)
您需要修改您应在以下位置找到的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>