ORA-01460:使用Hibernate @Lob请求未实现或不合理的转换

时间:2011-11-10 21:28:51

标签: java oracle hibernate jpa

我有一个byte[],我坚持按照以下方式持有Lob:

@Basic(fetch = FetchType.LAZY)
@Column(name = "ABF", length = Integer.MAX_VALUE)
@Lob
private byte[] abf;

看起来很简单,但是当我尝试在其中存储任何大小的内容(超过4000个字符)时,当我尝试提交时会出现以下异常:

  

java.sql.SQLException:ORA-01460:请求未实现或不合理的转换

我试图存储的文件都不是32,000个字符。这里还有其他问题吗?

4 个答案:

答案 0 :(得分:2)

请参阅this post

坚果壳:

<property name="hibernate.connection.SetBigStringTryClob">true</property>
<property name="hibernate.jdbc.batch_size">0</property>

它也可以是:

  • 旧的Oracle JDBC驱动程序(虽然我认为限制是2k)
  • 驱动程序/数据库版本不匹配
  • Hibernate config中指定的Oracle方言错误

对于数据库内容,提供驱动程序和数据库版本信息总是有帮助的:)

答案 1 :(得分:1)

我刚刚更新了oracle驱动程序,它工作正常。

主要是由于oracle驱动程序不匹配。

如果您拥有与oracle版本对应的正确版本的jdbc驱动程序,那么它应该不是问题。

答案 2 :(得分:1)

有时按顺序执行操作会有所帮助:

  • 使用空吊球插入新实体;
  • 提交;
  • 在新创建的实体上填充lob;
  • 更新并提交。

答案 3 :(得分:0)

@Dave Newton让我走上了正确的道路。答案涉及一些事情。正如Dave指出的那样,我将这些行添加到hibernate.cfg.xml:

<property name="hibernate.connection.SetBigStringTryClob">true</property>
<property name="hibernate.jdbc.batch_size">0</property>

我之前使用的是hsqldb-2.0.0.jar。我将其更新为当前版本(hsqldb-2.2.5.jar)。我认为这是罪魁祸首,我发誓我已经注意到自从这样做以来数据库性能的提升。

我还更新到当前版本的ojdbc14.jar(10.2.0.5)。我以前是在一些旧版本,但我不确切知道哪一个。应该注意的是,即使在更新到版本10.2.0.5之后,问题也没有消失。直到我更新hsqldb.jar版本才解决问题。