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

时间:2017-10-12 11:14:09

标签: java oracle hibernate

有没有办法将字节数组转换为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并遇到此问题。

3 个答案:

答案 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支持)。