我继承了一个使用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个字符的字符串?
干杯
答案 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)
字符串示例;