5

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

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 个字符的字符串,但我没有找到明确将对象变量分配给 VARCHAR 字段的代码片段。我知道 JPA 或 EclipseLink 会自动为您分配这个,所以我的问题是:

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

干杯

4

3 回答 3

10

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

于 2012-08-03T10:01:48.010 回答
2

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

@列(长度=1024)

字符串样本;

于 2012-08-04T20:18:44.650 回答
1

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

Java 类型 - byte[]、java.lang.Byte[]、java.sql.Clob

Java DB、Derby、CloudScape - CLOB(64000)

甲骨文 - 长

DB2 - CLOB (64000)

Sybase - 文本

MSSQL - 文本

MySQL - 文本(64000)

于 2012-08-03T10:57:03.743 回答