2012-08-16 2 views
9

Preistoria: ricevo l'eccezione JDBCExceptionReporter data exception: string data, right truncation per l'aggiornamento delle entità.Come impostare la dimensione della colonna di stringhe usando service.xml o Service Builder?

Ho trovato che questo significa che i dati sono troppo grandi per lo varchar specificato.

Nella service.xml colonna è specificato come:

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

ho trovato nel codice sorgente di Liferay per ServiceBuilder questo frammento:

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

Ora la mia domanda è: come posso definire il max-length per le mie colonne?

risposta

22

È necessario modificare il file portlet-model-hints.xml che si dovrebbe trovare sotto:

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

Qui è possibile definire hint valori quali:

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

poi trovare la colonna (s) che si desidera per applicare questo hint nello stesso file e dovrebbe essere simile al seguente:

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

o si può anche scrivere direttamente in questo modo, se v'è solo una colonna con il suggerimento specificato di max-length:

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

allora avete bisogno di eseguire build-service di nuovo e quando si distribuisce il portlet vostro tavolo DB dovrebbe essere aggiornato per riflettere questo cambiamento.

Spero che questo risponda alla tua domanda!

Ci sono altri hints e un elenco può essere trovato in questo wiki, ho appena mostrato max-length qui perché sembra che sia quello che ti serve.

Il file completo sarà simile al seguente se si dispone di una tabella, con una colonna. Molto probabilmente il tuo sarà molto più lungo!

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