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

Java 使用EclipseLink JPA绑定大于255个字符的字符串,java,sql,jpa,eclipselink,Java,Sql,Jpa,Eclipselink,我继承了一个使用EclipseLink JPA将对象持久化到任何SQL数据库的项目。目前,它附带了一个本地Derby DB发行版。在一些测试中,我发现程序将抛出以下异常: 012-08-03 10:21:11.357——工作单元(32349505)——异常 [EclipseLink-4002](Eclipse持久性服务)- 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.DatabaseException-Internal 异

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

012-08-03 10:21:11.357——工作单元(32349505)——异常 [EclipseLink-4002](Eclipse持久性服务)- 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.DatabaseException-Internal 异常:java.sql.SQLDataException:发生截断错误 尝试将VARCHAR“某些必须非常长的文本”压缩到长度255时遇到问题。错误代码:20000

显然,VARCHAR(通常)不适合存储大于255个字符的字符串,但我没有找到将objects变量显式分配给VARCHAR字段的代码片段。我知道JPA或EclipseLink会自动为您分配这个,所以我的问题是,我还没有找到一个简单的答案:

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


干杯

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

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

Java类型-byte[],Java.lang.byte[],Java.sql.Clob

JavaDB、Derby、CloudScape-CLOB(64000)

甲骨文长

DB2-CLOB(64000)

Sybase-文本

MSSQL-文本


MySQL-TEXT(64000)

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

@列(长度=1024)

串样