操作Clob时抛出Blob may not be manipulated from creating session.
来源:互联网 发布:怎样给淘宝客服评价 编辑:程序博客网 时间:2024/06/06 07:53
http://nneverwei.iteye.com/blog/1027611
程序上需要将数据库Clob字段转换为String,传到前台显示。因此对Pojo添加了一个String型中间字段用于Clob的转换。
问题就出在这里,我们调用了Hibernate.createClob(xxx)将一个String转为Clob用于对象的保存。
但事实上,Hibernate.createClob创建出来的Clob对象与直接从数据库查询出来的Clob对象类型是不同的。
数据库查询出来的Clob与数据库驱动实现具体相关。而createClob返回的是ClobImpl(hibernate的实现)。
翻看ClobImpl的源码,发现hibernate对一些常用的方法,如getSubString(...)等根本没有实现,而是直接丢一个异常出来(Blob may not be manipulated from creating session).
结论,使用Hibernate.createClob创建的Clob对象可以用于保存,但不适用于进一步的操作。(比如调用clob.getSubString字段)。
注:调用getSubString是为了将Clob转换为String,用于页面显示。实际上后来发现了一种替代方案。ClobImpl对getSubString没有实现,但对getCharacterStream是有实现的,因此可以使用下面的代码:
- try {
- String tmpStr = "";
- StringBuffer sb = new StringBuffer();
- BufferedReader br = new BufferedReader(bigColOri.getCharacterStream());
- while ((tmpStr=br.readLine())!=null){
- sb.append(tmpStr);
- }
- return sb.toString();
- } catch (java.sql.SQLException e1) {
- e1.printStackTrace();
- return null;
- } catch (java.io.IOException e2) {
- e2.printStackTrace();
- return null;
- }
- 操作Clob时抛出Blob may not be manipulated from creating session.
- Hibernate操作Blob/Clob时,发生cannot be cast to oracle.sql.BLOB错误分析
- Hibernate操作Blob/Clob时,发生cannot be cast to oracle.sql.BLOB错误分析
- Hibernate操作Blob/Clob时,发生cannot be cast to oracle.sql.BLOB错误分析
- Hibernate操作Blob/Clob时,发生ClassCastException:$Proxy263 cannot be cast to oracle.sql.BLOB错误分析
- jdbc操作blob,clob
- JDBC CLOB\BLOB操作
- 操作BLOB、CLOB、BFILE
- Hibernate 操作Blob Clob
- jdbc操作blob,clob
- Hibernate 操作Blob Clob
- JDBC操作Clob,Blob字段
- JAVA 操作 Oracle Clob,Blob
- IBATIS操作ORACLE BLOB CLOB
- IBATIS操作BLOB和CLOB
- IBATIS操作BLOB和CLOB
- JAVA操作Oracle中BLOB、CLOB
- hibernate对clob和blob的操作
- 经典Sql面试题收集!!
- CCLayerColor层的使用
- SVM
- 26-JAVA面向对象-抽象形式
- OpenCV + VS2008 配置及实例(打开摄像头)
- 操作Clob时抛出Blob may not be manipulated from creating session.
- 一道华为的机试题
- Linux指令学习
- .h与.hpp
- 动态生成table并实现分页效果
- Hadoop完全分布式模式的安装和配置
- jsp 乱码问题原因
- 好老师(湖南省第九届程序设计大赛原题)
- 微软面试题:在排序数组中,找出给定数字的出现次数