java - ORA-01461/BLOB/hibernate

标签 java oracle jdbc

我有一个 Oracle 数据库 10.2.0.4 实例。 我有基于 spring 框架 3.0.5、hibernate 3.5.6 的 java 应用程序。 我有一个包含 BLOB 列 ( blobContent BLOB ) 的表和一个包含 java.sql.Blob 的实体字段(在 hibernate XML 映射中映射为 <property name="blobContent" type="blob"/> )。 我使用 Oracle10gDialect。

我定期收到 ORA-01461 尝试在此表中插入行。 我尝试了几个 Oracle JDBC 驱动程序(10.2.0.4、10.2.0.5 和 11.2.0.3)但没有成功。 我用谷歌搜索和搜索元链接数据库来解决这个问题失败了。 我反编译了 Oracle JDBC 驱动程序并检查了从方法 oracle.jdbc.driver.OraclePreparedStatement.setBinaryStream(int, InputStream, long) 开始的代码通过 oracle.jdbc.driver.DBConversion直到 oracle.jdbc.driver.OracleConversionInputStream .

就此代码而言,一切看起来都还不错 :)

请告知如何追踪这个问题...可能在 Oracle 端(?)...可能正在寻找一些隐式转换... 可能是我错过了一些关于此问题的已知 Oracle 元链接文章?

最佳答案

我认为以下 oracle bug 是我错误的主要原因。升级数据库后我会再次检查问题并接受我自己的答案。我希望它对其他人有用。

顺便说一句,我们的平台也是 AIX/64x。

Oracle Bug 9018715 "INTERMITTENT ORA-1461 IN UPDATES AND INSERTS WITH NO LONG COLUMN TYPES"

B 型 - 缺陷

已在产品版本 11.1.0.7.0 中修复

严重性 2 - 服务严重丢失

产品版本 10.2.0.4.0

状态 93 - 已关闭,未由归档者验证

平台 212 - IBM AIX on POWER Systems(64 位)

创建于 2009 年 10 月 14 日

平台版本 5.3

201 年 12 月 27 日更新

基本错误不适用

数据库版本 10.2.0.4.0

影响通用平台

产品来源甲骨文

问题:

ORA-1461: 只能为插入到 LONG 列绑定(bind) LONG 值 在客户端应用程序中经常收到。

错误出现在插入和更新语句中,并且针对不同的表。 语句是这种类型的: 插入列 (, , ,..) 值(:1,:2,:3,...:n); 要么 更新集 = :1, = :2, = :3,.. = :n 其中 =:m; 并且所有列都不是 lONG 类型。

诊断分析:

将 rdbms 从 10.2.0.3 升级到 10.2.0.4。 它经常发生在不同的表上。一旦错误有 发生,重新执行同样的sql往往会成功。

数据库字符集:WE8ISO8859P15。 Windows 客户端。 NLS 设置:NLS_LANG=American_America.WE8ISO8859P15。

应用程序通过 Jdbc 瘦驱动程序版本 10.2.0.1 进行连接。 使用 jdbc 驱动程序版本 10.1.0.5 的测试也失败。

关于java - ORA-01461/BLOB/hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415913/

相关文章:

java - 将数据从 Java 类插入数据库

java - 必须在 GetStringUTFChars 之后调用 ReleaseStringUTFChars(将 char* 传递给 C 函数时)?

java - 可以使用 Java 打开 SSH 隧道吗?

java - 我们可以在java桌面应用程序中使用离线谷歌地图吗?

sql - 重复分析

java - 在sqlj中使用序列?

linux - Oracle 12c Ubuntu 17.04 安装报错

java - 如何在mysql中存储大于6mb的图像

java - 为什么这个 JDBC 语句会导致异常?

java - 在 SockJS 和 Tomcat 上使用 STOMP 的 Spring 没有升级到 Websockets