2012-08-03 7 views
5

Ho ereditato un progetto che utilizza EclipseLink JPA per mantenere gli oggetti in qualsiasi database SQL. Attualmente viene fornito con una distribuzione Derby DB locale. Durante alcuni test ho scoperto che il programma genererà la seguente eccezione:Utilizzo di EclipseLink JPA per il binding di stringhe più grandi di 255 caratteri

012-08-03 10: 21: 11,357 - UnitOfWork (32.349.505) - Eccezione [EclipseLink-4002] (Eclipse Persistenza Servizi - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException Interno Eccezione: java.sql.SQLDataException: Si è verificato un errore di troncamento durante il tentativo di ridurre VARCHAR "un testo necessariamente lungo veramente lungo" fino alla lunghezza 255 Codice di errore: 20000

Ovviamente VARCHAR non è (di solito) adatto per la memorizzazione di stringhe larg ma non ho trovato il frammento di codice in cui la variabile oggetti è assegnata esplicitamente a un campo VARCHAR. Capisco che JPA o EclipseLink assegni automaticamente questo per te, quindi la mia domanda, dove non sono riuscito a trovare una risposta semplice, è:

Come posso assicurarmi che EclipseLink/JPA memorizzi stringhe più grandi di 255 caratteri?

Acclamazioni

risposta

9

È necessario annotare la proprietà in modo che viene persisteva come Clob. Utilizzare @Lob; per String s per impostazione predefinita su Clob. Vedere here per la documentazione. Ovviamente è necessario assicurarsi che il tipo di colonna del database sia corretto (ovvero non VARCHAR) se si crea il database manualmente.

+0

Questo ha fatto il trucco. Grazie! –

1

Ti mostro il tipo di dati che esegue il binding di String di dimensioni superiori a 255 caratteri. Guarda questo;

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

Java DB, Derby, Cloudscape - CLOB (64000)

Oracle - LONG

DB2 - CLOB (64000)

Sybase - TESTO

MSSQL - TESTO

MySQL - TEXT (64000)

1

In molti ambienti @Colonna di tipo String ha un limite superiore a 255, ad esempio a 4kB. È necessario utilizzare 'lunghezza' per cambiare impostazione predefinita 255

@Column (lunghezza = 1024)

campione String;

Problemi correlati