Rev*_*lit 3 java oracle hibernate jpa oracle11g
日志中显示错误:
ORA-01461:只能绑定LONG值才能插入LONG列
确实没有其他有用的信息。我试图跟进代码,用google-d解决问题,我想我可能已经找到了问题,但是不幸的是我没有Oracle数据库或其他任何东西(即使代码不存在,我在写所有这些都来自内存和注释:()因此,我只能基于代码(以及大量的搜索)来猜测,是String映射到varchar2。一些环境信息:
Hibernate: 3.2.1.ga
Driver: ojdbc6-11.2.0.2.0.jar
Database: 11.2.0.2.0 - 64bit
Run Code Online (Sandbox Code Playgroud)
该表具有多个varchar2(300字节)和一个varchar2(4000字节),让我们称之为最后一个TEXT。我检查了实体,并在其列注释中,这些字段的值(甚至是TEXT(4000字节))的限制为300字节!这是一个奇怪的观点。我的疯狂猜测是,字符串来了,大于300 BYTE,这是尝试持久化时的错误记录(在堆栈跟踪点,代码试图持久化此实体的实例)。可悲的是,我只有那个日志可以继续下去..:((我的猜测是否可能?或者还会有其他事情吗?
这是实体字段:
@Column(name = "TEXT", nullable = false, length = varcharLength)
public String getText() {
return text;
}
Run Code Online (Sandbox Code Playgroud)
这是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")
);
Run Code Online (Sandbox Code Playgroud)
(并且该表在PUBLISH_DATE有一个索引,如果该索引是完全相关的。)
因此,使用更大的String而不是4000字节是一个问题。我们将该列更改为CLOB,这应该可以解决它。而且,如果字符文字小于4000字节,则仍将其存储在Oracle中,就像是varchar2(4000)一样。
| 归档时间: |
|
| 查看次数: |
12177 次 |
| 最近记录: |