使用EclipseLink JPA绑定大于255个字符的字符串

时间:2012-08-03 09:49:20

标签: java sql jpa eclipselink

我继承了一个使用EclipseLink JPA将对象持久存储到任何SQL数据库的项目。目前它附带了本地Derby DB发行版。在一些测试中,我发现该程序将抛出以下异常:

  

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(通常)不适合存储大于255个字符的字符串,但我没有找到将对象变量明确分配给VARCHAR字段的代码片段。我知道JPA或EclipseLink会自动为你分配这个,所以我的问题是,我找不到一个简单的答案,是:

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

干杯

3 个答案:

答案 0 :(得分:9)

您需要对属性进行注释,使其保持为Clob。使用@Lob;对于String,这将默认为Clob。有关文档,请参阅here。当然,如果手动创建数据库,则需要确保数据库列类型正确(即不是VARCHAR)。

答案 1 :(得分:1)

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

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

Java DB,Derby,CloudScape - CLOB(64000)

Oracle - LONG

DB2 - CLOB(64000)

Sybase - TEXT

MSSQL - TEXT

MySQL - TEXT(64000)

答案 2 :(得分:1)

在许多环境中,类型为String的@Column的限制大于255,例如为4kB。 您需要使用“长度”来更改默认值255

@Column(长度= 1024)

字符串示例;