有没有办法将字节数组转换为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 支持)。