2012-08-03 5 views
5

Odziedziczyłem projekt, który korzysta z JPA EclipseLink w celu utrwalania obiektów w dowolnej bazie danych SQL. Obecnie ma lokalną dystrybucję DB Derby. W przypadku niektórych prób okazało się, że program rzut następujące wyjątki:Użycie EclipseLink JPA do wiązania Ciągów większych niż 255 znaków

012-08-03 10: 21: 11,357 - UnitOfWork (32349505) - Wyjątek [EclipseLink-4002] (Eclipse persistence usługi - 2.3.2.v20111125-r10461): org.eclipse.perspence.exceptions.DatabaseException Internal Wyjątek: java.sql.SQLDataException: Błąd obcięcia był napotkany podczas próby zmniejszania VARCHAR 'koniecznie bardzo długiego tekstu' do długości 255 Kod błędu: 20000

Oczywiście VARCHAR nie jest (zwykle) odpowiedni do przechowywania Strings larg Ponad 255 znaków, ale nie znalazłem fragmentu kodu, w którym zmienna obiektów jest wyraźnie przypisana do pola VARCHAR. Rozumiem, że JPA lub EclipseLink automatycznie przypisuje to dla ciebie, więc moje pytanie, na które nie mogłem znaleźć prostej odpowiedzi, to:

Jak mogę się upewnić, że EclipseLink/JPA przechowuje ciągi większe niż 255 znaków?

Cheers

Odpowiedz

9

Trzeba opisywanie własności tak robi trwało jak Clob. Użyj @Lob; dla String s to będzie domyślnie Clob. Zobacz dokumentację w dokumencie here. Oczywiście należy upewnić się, że typ kolumny bazy danych jest poprawny (tj. Nie VARCHAR), jeśli baza danych zostanie utworzona ręcznie.

+0

To wystarczyło. Dziękuję Ci! –

1

Pokażę ci typ danych, które wiążą Ciąg większy niż 255 znaków. Zobacz;

Jawa Typ - bajt [] java.lang.Byte [] java.sql.Clob

Java DB, Derby, chmura - CLOB (64000)

WYROCZNIA - LONG

DB2 - CLOB (64000)

Sybase - TEKST

MSSQL - TEKST

MySQL - TEKST (64000)

1

W wielu środowiskach @ Kolumna typu Ciąg ma ograniczenie większe niż 255, na przykład do 4kB. Musisz użyć 'długość', aby zmienić domyślne 255

@Column (długość = 1024)

próbkę String;