3

日志中有一条错误提示:

ORA-01461: 只能绑定 LONG 值以插入 LONG 列

真的没有其他有用的信息。我试图跟进代码,google-d 问题,我想我可能已经找到了问题,但不幸的是我没有 Oracle 数据库或任何东西(即使代码不存在于我,我正在写所有这些都来自记忆和笔记:()所以我唯一能根据代码(以及大量谷歌搜索)猜测的是到 varchar2 的字符串映射。一些环境信息:

Hibernate: 3.2.1.ga
Driver: ojdbc6-11.2.0.2.0.jar
Database: 11.2.0.2.0 - 64bit

该表有多个 varchar2(300 字节)和一个 varchar2(4000 字节),我们称之为最后一个 TEXT。我检查了实体,在它的列注释中,这些字段的值限制为 300 字节,即使是 TEXT(4000 字节)字段!所以这是一个奇怪的点。我的疯狂猜测是出现了一个大于 300 字节的字符串,这是在尝试持久化时打印到日志中的错误(代码尝试持久化该实体实例的堆栈跟踪点)。可悲的是,我只有那个日志可以继续.. :( 我的猜测可能吗?或者它会是别的东西?

这是实体字段:

@Column(name = "TEXT", nullable = false, length = varcharLength)
public String getText() {
    return text;
}

这是创建语句(无论如何都是必不可少的部分):

CREATE TABLE "TABLENAME" 
   (
   "ID" VARCHAR2(300 BYTE) NOT NULL ENABLE, 
   "VERSION" NUMBER(10,0), 
   "TEXT" VARCHAR2(4000 BYTE) NOT NULL ENABLE, 
   "PUBLISH_DATE" DATE NOT NULL ENABLE, 
   PRIMARY KEY ("ID")
   );

(并且该表在 PUBLISH_DATE 上有一个索引,如果这完全相关的话。)

4

1 回答 1

6

因此,更大的字符串然后 4000 字节是一个问题。我们将列更改为 CLOB,这应该可以解决它。如果字符文字小于 4000 字节,它仍然会存储在 Oracle 中,就好像它是 varchar2(4000)。

于 2013-06-17T12:58:32.580 回答