我有一个 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/