有没有办法将字节数组转换为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 )
其中buffer是一个字节数组。
创建CLOB有两种类似的方法:
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',并使qiberxswpoi成为hibernate映射。问题得到解决,因为我的数字签名数据不超过2 MB(java string max支持)。