将字节数组转换为java.sql.Clob



有没有办法将字节数组转换为java.sql.Clob?

我遇到了这种类型的问题...

getHibernateTemplate().save(object)

其中对象具有private Clob docData;字段,并且类似的字段映射到oracle表中,CLOB

这个docData clob是从我的java代码中的某个地方形成的,就像Hibernate.createClob(someString)

我试图用type="clob"保存它,但cann't cast com.sun.proxy$Proxy124 to oracle.sql.CLOB.我已经尝试了很多方法来删除此代理,但最终失败了。

所以我决定像byte[] data = IOUtils.toByteArray(docData.getCharacterStream());/byte[] data = IOUtils.toByteArray(docData.getAsciiStream())一样,把它保存为type="binary"但我正在Caused by: java.sql.BatchUpdateException: ORA-01461: can bind a LONG value only for insert into a LONG column.

所以现在我想从 byte[] 创建为 Clob。

欢迎任何帮助。

请注意,早些时候我使用的是Hibernate 3.3,并且在没有任何此类字节数组转换等的情况下工作正常...现在我已经升级到Hibernate 3.6.10并遇到此问题。

我正在使用此方法创建 Blob:

org.hibernate.engine.jdbc.NonContextualLobCreator.NonContextualLobCreator.INSTANCE.createBlob( buffer )

其中缓冲区是一个字节数组。

创建 CLOB 有 2 种类似的方法:

NonContextualLobCreator.INSTANCE.createClob( reader, length )
NonContextualLobCreator.INSTANCE.createClob( string )

选择更适合您的数据的那个。

您的错误消息显示

不能将 com.sun.proxy$Proxy124 转换为 oracle.sql.CLOB

在文本的其余部分,您指的是java.sql.Clob检查导入,您可能正在使用 oracle.sql 包中的 clob,而不是 java.sql 包的某个地方。

好吧,问题解决了。我仅将java数据类型保留为"Clob",并使休眠映射像type="string"一样。问题已解决,因为我的数字签名数据包含的 MB 不超过 2 MB(Java 字符串 max 支持)。

相关内容

最新更新