java.lang.ClassCastException:oracle.sql.CLOB无法强制转换为oracle.sql.CLOB

我最近升级了一个使用JAVA 7和JBoss 7.1.1运行的应用程序。该应用程序最初是在JAVA 5和Jboss 4.2.2上开发的。 此应用程序使用hibernate 3进行持久化。

在新平台上,当尝试插入具有上述错误的CLOB字段的表时,应用程序失败。 我使用的是ojdbc14.jar(后端数据库Oracle 10.2.0.3)

这些是我在jboss 7.1.1配置中validation的内容:

  1. 为Oracle创建正确的模块。 确保ojdbc14.jar存在于正确的modules目录中
  2. 确保jboss目录中的其他任何位置都没有其他冲突的ojdbc.jar
  3. 确保应用程序不是指不同的ojdbc.jar。

任何见解都会有所帮助。 我拉着头发试图解决这个问题差不多一个星期了。

非常感谢

我解决了这个问题。 发表这个答案,希望它可能对某人有用。

当我检查查询检索到的CLOB的实例类型时,它出现为oracle.sql.CLOB。 所以我认为它必定是ojdbc.jar的版本不匹配。 我为ojdb.jar的多个副本检查了我的项目数十亿次。 没有。

最后它发现是hibernate和ojdbc之间的冲突。 我更改了对java.sql.Clob的引用。 Hibernate使用java.sql.Clob。 这解决了这个问题。

在我的情况下,我不使用Hibernate,但我使用Jboss像容器,我不得不从jboss-deployment-structure.xml中删除oracle的模块,所以我不能再使用oracle.sql.CLOB,我有同样的问题

  java.lang.ClassCastException: oracle.sql.CLOB cannot be cast to oracle.sql.CLOB 

最后我用过

  java.sql.Clob clobValue = (java.sql.Clob)result.getClob("EMIRFILE"); 

并正常工作。 我希望这有助于某人。