2012-08-16 7 views
9

Vorgeschichte: Ich bekomme JDBCExceptionReporter data exception: string data, right truncation Ausnahme bei der Aktualisierung von Entitäten.Wie wird die Größe der String-Spalte mit service.xml oder Service Builder festgelegt?

Ich habe festgestellt, dass dies bedeutet, die Daten sind zu groß für die angegebenen varchar.

In den service.xml die Säule wird wie angegeben:

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

Ich habe in Liferay Quellcode für ServiceBuilder dieses Fragment gefunden:

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"); 
    } 
} 

Nun meine Frage ist, wie kann ich die max-length definieren für meine Spalten?

Antwort

22

Sie benötigen portlet-model-hints.xml-Datei zu ändern, dass Sie sollten finden Sie unter:

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

In hier Sie hint Werte definieren können, wie zum Beispiel:

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

dann die Spalte (n), die Sie wollen um dieses hint in der gleichen Datei anzuwenden und es sollte so aussehen:

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

oder Sie können wie dies auch direkt schreiben, wenn es nur eine Spalte mit dem angegebenen Hauch von max-length ist:

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

Dann brauchen Sie build-service wieder laufen und wenn Sie Ihr Portlet Ihrer DB-Tabelle sollte implementieren sein aktualisiert, um diese Änderung widerzuspiegeln.

Ich hoffe, dies beantwortet Ihre Frage!

Es gibt andere hints und eine Liste kann in diesem wiki gefunden werden, ich habe gerade max-length hier gezeigt, wie es klingt, als ob das ist, was Sie brauchen.

Die vollständige Datei würde etwa so aussehen, wenn Sie eine Tabelle mit einer Spalte hätten. Ihr wird höchstwahrscheinlich viel länger sein!

<?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> 
Verwandte Themen