2012-08-16 16 views
9

Prehistoria: obtengo la excepción JDBCExceptionReporter data exception: string data, right truncation al actualizar las entidades.¿Cómo establecer el tamaño de la columna de cadena utilizando service.xml o Service Builder?

He encontrado que esto significa que los datos son demasiado grandes para el varchar especificado.

En el service.xml la columna se especifica como:

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

He encontrado en el código fuente de Liferay para ServiceBuilder este fragmento:

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

Ahora mi pregunta es, ¿cómo puedo definir la max-length para mis columnas?

Respuesta

22

Es necesario modificar el archivo portlet-model-hints.xml que se debe encontrar en:

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

Aquí puede definir hint valores tales como:

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

A continuación, busque la columna (s) que desea para aplicar esto hint en el mismo archivo y debería verse así:

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

o puede también escribir directamente como esto, si sólo hay una columna con la pista especificada de max-length:

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

Luego hay que ejecutar build-service otra vez y cuando se implementa el portlet su mesa DB debe haber actualizado para reflejar este cambio.

Espero que esto responda a su pregunta!

Hay otros hints y una lista se puede encontrar en este wiki, Acabo de mostrar max-length aquí, ya que parece que es lo que necesita.

El archivo completo se vería como el siguiente si tuviera una tabla, con una columna. ¡Lo más probable es que la suya sea mucho más larga!

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