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

问题描述 投票:2回答:3

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

java oracle hibernate
3个回答
0
投票

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

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

其中buffer是一个字节数组。

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

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

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


0
投票

您的错误消息说

无法将com.sun.proxy $ Proxy124转换为oracle.sql.CLOB

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


0
投票

好吧,问题解决了。我只将java数据类型保存为'Clob',并使qiberxswpoi成为hibernate映射。问题得到解决,因为我的数字签名数据不超过2 MB(java string max支持)。

© www.soinside.com 2019 - 2024. All rights reserved.