2012-08-16 15 views
9

病史:我得到JDBCExceptionReporter data exception: string data, right truncation異常更新實體。如何使用service.xml或Service Builder設置字符串列的大小?

我發現這意味着,對於指定的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爲我的專欄?

回答

22

您需要修改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> 

然後找到列(S)你想在同一個文件中應用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> 
相關問題