有没有办法将字节数组转换为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并遇到此问题。
答案 0 :(得分:0)
我正在使用此方法创建Blob:
org.hibernate.engine.jdbc.NonContextualLobCreator.NonContextualLobCreator.INSTANCE.createBlob( buffer )
其中buffer是一个字节数组。
有两种类似的创建CLOB的方法:
NonContextualLobCreator.INSTANCE.createClob( reader, length )
NonContextualLobCreator.INSTANCE.createClob( string )
选择一个更适合您的数据。
答案 1 :(得分:0)
您的错误消息显示
无法将com.sun.proxy $ Proxy124强制转换为 oracle.sql.CLOB
在文本的其余部分中,您指的是java.sql.Clob
检查导入,您可能正在使用oracle.sql包中的clob而不是某处的java.sql包。
答案 2 :(得分:0)
嗯,问题已解决。我把java数据类型保存为' Clob'只做了像artisan
这样的hibernate映射。问题得到解决,因为我的数字签名数据不超过2 MB(java string max支持)。