Oracle 11g + Hibernate - > ORA-01461:只能将LONG值绑定到LONG列中

时间:2013-06-05 19:30:39

标签: java oracle hibernate jpa oracle11g

日志中出现错误:

  

ORA-01461:只能插入LONG值才能插入LONG列

真的没有其他有用的信息。我试图跟进代码,google -d问题,我想我可能已经找到了问题,但不幸的是我没有Oracle数据库或任何真正的东西(即使代码不存在我,我正在写这一切都来自记忆和笔记:() 因此,根据代码(以及大量的googling),我唯一可以猜到的是String映射到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字节)字段!所以这是一个奇怪的观点。我的猜测是,一个String来了,大于300 BYTE,这是在尝试持久化时打印到日志中的错误(堆栈跟踪点,代码试图保持该实体的实例)。可悲的是我只有那个日志继续...... :(我的猜测可能吗?或者它会是别的什么?

这是实体字段:

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

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

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有一个索引,如果它完全相关的话。)

1 个答案:

答案 0 :(得分:5)

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

相关问题