2012-08-03 16 views
5

Heredé un proyecto que usa EclipseLink JPA para persistir objetos en cualquier base de datos SQL. Actualmente viene con una distribución local de Derby DB. Durante algunas pruebas descubrí que el programa será la siguiente excepción:Uso de EclipseLink JPA para enlazar cadenas de más de 255 caracteres

012-08-03 10: 21: 11,357 - UnitOfWork (32349505) - Excepción [EclipseLink-4002] (Eclipse servicios de persistencia - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException Interno Excepción: java.sql.SQLDataException: Un error de truncamiento fue encontrado al intentar reducir VARCHAR 'texto necesariamente muy largo' hasta longitud 255 Código de error: 20000

Obviamente VARCHAR no es (por lo general) adecuado para almacenar Strings larg Más de 255 caracteres todavía no encontré el fragmento de código donde la variable de objetos está explícitamente asignada a un campo VARCHAR. Entiendo que JPA o EclipseLink lo asignan automáticamente, así que mi pregunta, donde no pude encontrar una respuesta simple, es:

¿Cómo puedo asegurarme de que EclipseLink/JPA almacene cadenas de más de 255 caracteres?

Saludos

Respuesta

9

necesita anotar la propiedad por lo que se mantuvo como Clob. Use @Lob; para String s, este valor predeterminado será Clob. Ver here para la documentación. Por supuesto, debe asegurarse de que el tipo de columna de la base de datos sea correcto (es decir, no VARCHAR) si crea la base de datos manualmente.

+0

Eso hizo el truco. ¡Gracias! –

1

Le muestro el tipo de datos para enlazar Cadena de más de 255 caracteres. Mira esto;

Java Tipo - byte [], java.lang.Byte [], java.sql.Clob

Java DB, Derby, con nubes - CLOB (64000)

Oracle - LARGO

DB2 - CLOB (64000)

Sybase - TEXTO

MSSQL - TEXTO

MySQL - TEXTO (64000)

1

En muchos entornos @Columna de tipo Cadena tiene un límite superior a 255, por ejemplo a 4kB. Es necesario utilizar 'longitud' para cambiar por defecto 255

@Column (longitud = 1024)

muestra de cuerdas;

Cuestiones relacionadas