2012-08-03 44 views
5

我继承了一个使用EclipseLink JPA将对象保存到任何SQL数据库的项目。目前它配备了本地的Derby DB发行版。在一些测试中,我发现,程序将抛出以下异常:使用EclipseLink JPA绑定大于255个字符的字符串

012-08-03 10:21:11.357 - 的UnitOfWork(32349505) - 异常 [EclipseLink的-4002(Eclipse持久服务 - 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.DatabaseException内部 异常:java.sql.SQLDataException:截断错误为 遇到尝试缩小VARCHAR'某些必须非常长的文本'到长度255 。错误代码:20000

显然VARCHAR不是(通常)适用于存储字符串larg呃超过255个字符,但我没有找到代码片段的对象变量明确分配给VARCHAR字段。我知道JPA或EclipseLink会自动为你分配,所以我的问题,我找不到一个简单的答案,是:

如何确保EclipseLink/JPA存储大于255个字符的字符串?

干杯

回答

9

你需要这样会将它作为坚持以Clob注释财产。使用@Lob;对于String,这将默认为Clob。有关文档,请参阅here。当然,如果您手动创建数据库,则需要确保数据库列的类型正确(即不是VARCHAR)。

+0

这样做。谢谢! – 2012-08-03 11:09:03

1

我向你展示绑定大于255个字符的字符串的数据类型。看到这个;

的Java类型 - 字节[],java.lang.Byte的[],java.sql.Clob中

爪哇DB,德比,CLOUDSCAPE - CLOB(64000)

甲骨文 - LONG

DB2 - CLOB(64000)

的Sybase - TEXT

MSSQL - TEXT

MySQL - TEXT(64000)

1

在许多环境中@类型为String的列的限制大于255,例如对于4kB。 需要使用 '长度' 改变默认255

@Column(长度= 1024)

字符串样品;