Java ORA-01460:使用Hibernate@Lob请求的转换未实现或不合理
我有一个Java ORA-01460:使用Hibernate@Lob请求的转换未实现或不合理,java,oracle,hibernate,jpa,Java,Oracle,Hibernate,Jpa,我有一个字节[],我将其持久化到Lob,如下所示: @Basic(fetch = FetchType.LAZY) @Column(name = "ABF", length = Integer.MAX_VALUE) @Lob private byte[] abf; 看起来很简单,但当我尝试在其中存储任何较大的内容(超过4000个字符)时,我在尝试提交时遇到以下异常: java.sql.SQLException:ORA-01460:未实现或请求的转换不合理 我试图存储的文件中没有一个接近32000
字节[]
,我将其持久化到Lob,如下所示:
@Basic(fetch = FetchType.LAZY)
@Column(name = "ABF", length = Integer.MAX_VALUE)
@Lob
private byte[] abf;
看起来很简单,但当我尝试在其中存储任何较大的内容(超过4000个字符)时,我在尝试提交时遇到以下异常:
java.sql.SQLException:ORA-01460:未实现或请求的转换不合理
我试图存储的文件中没有一个接近32000个字符。这里还有其他问题吗?请参阅
简而言之:
<property name="hibernate.connection.SetBigStringTryClob">true</property>
<property name="hibernate.jdbc.batch_size">0</property>
true
0
也可以是:
- 旧的Oracle JDBC驱动程序(尽管我认为当时的限制是2k)
- 驱动程序/数据库版本不匹配
- Hibernate配置中指定了错误的Oracle方言
<property name="hibernate.connection.SetBigStringTryClob">true</property>
<property name="hibernate.jdbc.batch_size">0</property>
true
0
也可以是:
- 旧的Oracle JDBC驱动程序(尽管我认为当时的限制是2k)
- 驱动程序/数据库版本不匹配
- Hibernate配置中指定了错误的Oracle方言
对于数据库内容,提供驱动程序和数据库版本信息总是很有帮助的:)@Dave Newton让我走上了正确的道路。答案涉及几件事。正如Dave指出的,我在hibernate.cfg.xml中添加了以下行:
<property name="hibernate.connection.SetBigStringTryClob">true</property>
<property name="hibernate.jdbc.batch_size">0</property>
true
0
我以前使用的是hsqldb-2.0.0.jar。我将其更新为当前版本(hsqldb-2.2.5.jar)。我认为这是罪魁祸首,并且我发誓我已经注意到了自这样做以来数据库性能的提高
我还更新了ojdbc14.jar的当前版本(10.2.0.5)。我以前用过一些旧版本,但我不知道到底是哪一个。应该注意的是,即使在更新到版本10.2.0.5之后,问题仍然没有消失。直到我更新了hsqldb.jar版本,问题才得以解决。@Dave Newton让我走上了正确的道路。答案涉及几件事。正如Dave指出的,我在hibernate.cfg.xml中添加了以下行:
<property name="hibernate.connection.SetBigStringTryClob">true</property>
<property name="hibernate.jdbc.batch_size">0</property>
true
0
我以前使用的是hsqldb-2.0.0.jar。我将其更新为当前版本(hsqldb-2.2.5.jar)。我认为这是罪魁祸首,并且我发誓我已经注意到了自这样做以来数据库性能的提高
我还更新了ojdbc14.jar的当前版本(10.2.0.5)。我以前用过一些旧版本,但我不知道到底是哪一个。应该注意的是,即使在更新到版本10.2.0.5之后,问题仍然没有消失。直到我更新了hsqldb.jar版本,问题才得以解决。我刚刚更新了oracle驱动程序,它工作正常 这主要是由于oracle驱动程序不匹配
如果您有与您的oracle版本相对应的正确版本的jdbc驱动程序,这应该不是问题。我刚刚更新了oracle驱动程序,它工作正常 这主要是由于oracle驱动程序不匹配
如果您有与您的oracle版本相对应的正确版本的jdbc驱动程序,这应该不是一个问题。有时,按此顺序执行操作会有所帮助:
- 插入具有空lob的新实体李>
- 承诺李>
- 填充新创建实体上的lob李>
- 更新并提交
- 插入具有空lob的新实体李>
- 承诺李>
- 填充新创建实体上的lob李>
- 更新并提交
是整数。MAX_值
?如果没有别的,那就把它定为一个合理的数字;可能不会修正它,但我假设你也不是真的这么想。我开始想,可能是文件中的某个字符或某个东西导致了错误。它允许保存一些文件,没有例外。)nd其他人抛出错误。我还不能找出区别。明白了!我必须更新两个库:hsqldb.jar(到版本2.2.5)和ojdbc14到current。感谢您的帮助@DaveNewton@MTR亲爱的,是的,神谕司机在一些事情上是相当敏感的。我不确定我实际上回答了这个问题,只是指出。考虑回答你自己的问题的细节,并接受它代替。Hmm.…没有运气到目前为止,这些属性。我是使用Oracle 11g但使用10g方言,因为没有11gdialect@MTR嗯,我是说,我知道这是个问题,但我不记得怎么解决它了(我有:/顺便问一下,为什么你的长度是整数。MAX_值
?如果没有别的,那就把它定为一个合理的数字;可能不会修正它,但我假设你也不是真的这么想。我开始想,可能是文件中的某个字符或某个东西导致了错误。它允许保存一些文件,没有例外。)nd其他人抛出错误。我还不能找出区别。明白了!我必须更新两个库:hsqldb.jar(到版本2.2.5)和ojdbc14到current。感谢您的帮助@DaveNewton@MTR是的,Oracle的驱动程序在一些事情上是相当敏感的。我不确定我实际上回答了这个问题,只是指出。考虑用细节回答你自己的问题,并接受它。