5

EclipseLinkJPAを使用してオブジェクトを任意のSQLデータベースに永続化するプロジェクトを継承しました。現在、ローカルのDerbyDBディストリビューションが付属しています。いくつかのテスト中に、プログラムが次の例外をスローすることがわかりました。

012-08-03 10:21:11.357--UnitOfWork(32349505)--例外[EclipseLink-4002](Eclipse Persistence Services-2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.DatabaseException内部例外: java.sql.SQLDataException:VARCHAR'いくつかの必然的に非常に長いテキスト'を長さ255に縮小しようとして切り捨てエラーが発生しました。エラーコード:20000

明らかに、VARCHARは(通常)255文字を超える文字列を格納するのには適していませんが、objects変数が明示的にVARCHARフィールドに割り当てられているコードフラグメントは見つかりませんでした。JPAまたはEclipseLinkがこれを自動的に割り当てることを理解しているので、簡単な答えがまだ見つからなかった私の質問は次のとおりです。

EclipseLink / JPAが255文字を超える文字列を格納していることを確認するにはどうすればよいですか?

乾杯

4

3 に答える 3

10

プロパティに注釈を付けて、として永続化する必要がありますClob。使用@Lob; sの場合、Stringこれはデフォルトで。になりますClob。ドキュメントについては、こちらをご覧ください。もちろんVARCHAR、データベースを手動で作成する場合は、データベースの列タイプが正しい(つまり正しくない)ことを確認する必要があります。

于 2012-08-03T10:01:48.010 に答える
2

多くの環境では、String型の@Columnには、たとえば4kBなどの255を超える制限があります。デフォルトの255を変更するには、「length」を使用する必要があります

@Column(長さ= 1024)

文字列サンプル;

于 2012-08-04T20:18:44.650 に答える
1

255文字を超える文字列をバインドするデータ型を示します。これを参照してください。

Javaタイプ-byte[]、java.lang.Byte []、java.sql.Clob

Java DB、Derby、CloudScape-CLOB(64000)

Oracle-LONG

DB2-CLOB(64000)

Sybase-テキスト

MSSQL-テキスト

MySQL-TEXT(64000)

于 2012-08-03T10:57:03.743 に答える