2010-01-21 17 views
7

En mi aplicación web, tengo un área de texto cuyos contenidos llenos por el usuario se conservan finalmente en la base de datos con Hibernate. Me he encontrado con un problema que cuando la entrada del usuario supera una cierta duración, la persistencia falla. ¿Hay alguna manera de indicar a través de Hibernate Annotations o en la configuración que este campo particular debería soportar cadenas más largas, y que el tipo de columna de la base de datos debería reflejar esto?Problema de cadenas largas persistentes con Hibernate

Aquí es la excepción que estoy recibiendo:

Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'introText' at row 1 
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2007) 
    at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1443) 
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) 
    ... 41 more 
+0

¿Por qué dice que no? ¿trunca la cadena silenciosamente en el back-end o recibe un mensaje de error? Si le dices a hibernate que es un tipo de cadena, intentará guardar todo. –

+0

El contenido del usuario se establece en un objeto String. Se lanza una excepción durante la persistencia. – lupefiasco

+0

¿podría poner la excepción en su publicación? :) y tal vez el fragmento de tu mapeo actual. –

Respuesta

20

se puede utilizar el parámetro de longitud en la anotación, así:

@Column(length=1000) 

o usted podría cambiar el tipo de columna a algo así como texto si su base de datos lo admite, así:

@Column(columnDefinition="text") 

Si está utilizando hbm2ddl actualización , y la columna se creará para usar ese tipo en su lugar (base de datos específica).

+2

solo para complementar, aquí la longitud debe ser un int, y por lo tanto @Column (longitud = 1000) – Thomas

+1

Para nuestro proyecto, nos gusta que la base de datos psql use el tipo VARCHAR para algunas columnas sin un tamaño específico. Para esto usamos: @Column (columnDefinition = "VARCHAR") – mahler

+0

Especialmente porque en PostgreSQL "varchar" es lo mismo que "texto". http://stackoverflow.com/questions/4848964/postgresql-difference-between-text-and-varchar-character-varying – tgharold

0

bien que es realmente un error de DB.

Data too long for column 'introText' 

verifique la columna introText en su base de datos y es probable que varchar sea de tamaño limitado. Tendrá que cambiar el tipo de almacenamiento a algo más grande para que no trunque su texto.

Si crees que no es así, tendrás que mostrar tu mapeo y esquema.

5

tuve un problema similar que he resuelto mediante la asignación del tipo de hibernación "texto" a la propiedad:

@Type(type="text") 
Cuestiones relacionadas