hibernate 保存clob,blob出现的问题

在oracle中,用hibernate操作clob对象花了三天时间。终于把他弄对了。

 

前提:oracle中用一个clob字段。hbm.xml中对应的是java.sql.Clob/

 

 

 <property
            name="answer"
            type="java.sql.Clob"
            update="true"
            insert="true"
            column="answer"
        />

 

 

pojo中:

    

               ....... 其他属性
               private java.sql.Clob;

                 public Clob getAnswer() {
		return this.answer;
	}

	public void setAnswer(Clob answer) {
		this.answer = answer;
	}
                .........其他方法

 

存储的时候用session.save(obj)的方法;

这样做 clob属性中数据少的时候没报错。但数据量大的时候就会抛莫名其妙的异常。

问题出在Oracce中Blob/Clob字段独特的访问方式,Oracle Blob/Clob字段本身拥有一个游标(cursor) , JDBC必须通过游标对Blob/ Clob字段进行操作,在Blob/Clob字段被创建之前,我们无法获取其游标句柄,这也就意味着,我们必须首先创建一个空Blob/Clob字段,再从这个空Blob/Clob字段获取游标,写入我们所期望保存的数据。

至于如何操作可参考本博客其他文章(转载的)。

 

这里主要讲述两个异常

 

(1) java.lang.ClassCastException : org.hibernate.lob.clobImpl 转型异常

   原因:用hibernateTemplate.save(),或者session.save()保存完对象后发现其对象的类型是clobImpl的。

   此时强制转化就会报错。

   解决方法:要用session.refresh()方法。也就是说refresh()方法必须在取clob对象之前。

 (2) ORA-01002: 读取违反顺序

  原因:在refresh方法的时候导致的

  解决方法:用session开始一个事务。然后就最后末事务在提交。(至于为什么,我也不清楚)

 

上述主要涉及的是hibernate存储clob,若直接用jdbc同样注意两个错误。

(1)ORA-01002: 读取违反顺序

 同上原理。设置connection 自动提交为false,

                conn.setAutoCommit(false);

(2)ORA-22920: 未锁定含有 LOB 值的行

  在select 时候 要加上 “for update ”

例子:

Connection conn = getConnection();
          	  conn.setAutoCommit(false);
         	  PreparedStatement p=conn.prepareStatement("select * from train_test where id='"+po.getId()+"' for update");
         	  ResultSet rs = p.executeQuery(); 
           	  rs.next();
         	  CLOB testDesc= (CLOB) rs.getClob("test_desc");
            	  CLOB answer= (CLOB) rs.getClob("answer");
         	  
        	  testDesc.putString(1, getValue(ret,"试题题目"));
          	  answer.putString(1, getValue(ret,"试题答案"));
           	  p=conn.prepareStatement("update train_test set  test_desc=? ,answer=?");
          	  p.setClob(1, testDesc);
       	  p.setClob(2, answer);
        	  p.executeUpdate();
          	  conn.commit();   
            	 

   

写完,收工。

Hibernate存储Clob字段的方式总结 介绍了利用Hibernate将一个长字符串转换为流存储至Clob字段中,然后再从Clob字段中读出来,转换为字符串输出的方式 立即下载

相关推荐

hibernate保存blob,clob对象

NULL 博文链接:https://sxpujs.iteye.com/blog/368960

关于hibernate查询,数据库字段为clob的错误原因及解决方法记录

关于hibernate查询,数据库字段为clob的错误原因及解决方法记录

beat1314的博客 3130

XGBoost调参新姿势:Bayesian优化实战指南(附完整代码)

本文详细介绍了如何使用Bayesian优化方法高效调优XGBoost模型参数。通过解析Bayesian优化核心原理和XGBoost关键参数,提供完整的实战代码示例,帮助读者掌握这一智能调参技术,显著提升模型性能。文章特别适合机器学习工程师和数据科学家阅读。

weixin_42536058的博客 366

Hibernate保存Oracle的Clob字段的解决方案

 备注:本文系原创,欢迎转载。转载请注明出处: http://blog.youkuaiyun.com/techyang    Session session = HibernateUtil.currentSession();//建立session     HibernateUtil.beginTransaction(); //开始事务     uMovieInfo.setContent(Hibernate

techyang 的专栏 (一万年太久,只争朝夕) 4498

一步一步搭建S32K14x的AutoSar项目----MCAL工程创建及说明

一步一步搭建S32K14X的Autosar项目--MCAL工程创建及说明

wo580231的博客 2493

pytorchDataLoader中调整数据长度不一致问题(lstm等)

数据长度不一致 用pytorch做rnn的时候,如果输入数据不一样长,可以用两种方式解决。 一种是自定义collate方法, #自定义collate_fn dataloader.DataLoader(dataset,4,True,collate_fn=my_collate) 然后里面写数据和标签载入方式即可 def my_collate(batch): data = [item[0] for item in batch] target = [item[1] for item in batc

weixin_48174100的博客 7770

Hibernate 事务方法保存clob类型数据

Hibernate 保存clob类型数据 以及关系到事务所出现的问题(写此文以防备忘)说明:方法A():普通的方法未实现事务;方法B();普通方法;方法doA();对A方法增加事务支持方法doB():对方法B()增加事务支持方法ntB();对方法B()声明一个新的事物使用方式一:A(){   doB();}doB(){    //方法中保存一个Clob字段到数据库}按照上述调用会出现错误:Active Spring transaction synchronization or active JTA tran

JSH'S 1025

SAM3模型国内快速上手:Modelscope权重下载+环境配置一条龙指南

本文详细介绍了SAM3模型在国内的快速部署方案,包括通过Modelscope平台下载权重文件、优化CUDA 11.8环境配置以及实战避坑技巧。针对国内开发者常见的网络问题和环境兼容性问题,提供了从权重下载到模型加载的全流程指南,帮助用户高效完成部署并快速上手SAM3模型。

weixin_28465009的博客 1139

java clob 释放_JAVA中处理CLOB与BLOB的注解问题

JAVA中处理CLOB与BLOB的注解问题java中处理Clob类型:1、注解符处理:@Lob@Basic(fetch = FetchType.EAGER)@Column(name="SUBSTANCE", columnDefinition="CLOB",nullable=true)这种配置完全错误导致信息过长保存失败;1>正确配置方法如下:2>在spring配置文件需要配置:Blob...

weixin_39946029的博客 288

逆向工程师视角:拆解DataDome滑块验证码的3层防护机制与绕过思路

本文从逆向工程师视角,深入剖析DataDome滑块验证码的三层核心防护机制。第一层通过动态加密参数实现会话绑定与抗重放;第二层采集TLS指纹、鼠标轨迹动力学等多维行为数据进行一致性验证;第三层则是基于机器学习的后端异步风险决策引擎。文章不仅拆解了其技术原理,更分享了模拟、钩取等超越单纯工具调用的底层分析与绕过思路。

f6g7h8i9j的博客 730

病理图像处理个人手札(三)WSI & MIL

1.什么是WSI? WSI全称是Whole Slide Image,也就是全视野数字切片,主要应用在病理学细胞图像领域。WSI 是利用数字扫描仪对传统的病理切片进行扫描,采集具有高分辨率的数字图像,再通过计算机将得到的碎片化图像进行无缝拼接整合,制作可视化数字图像的一项技术。与传统载玻片相比,很好地解决了传统的玻璃切片易损坏、易褪色、易丢片、检索困难的问题。 一言以蔽之,WSI是对传统载玻片进行数字化。 由于是全视野,因此它将包含多尺度的切片在一个文件上面。因此WSI将使用到金字塔模型满足其支持不同分辨率的

baiweizeng的博客 1万+

利用Hibernate储存大对象到达梦数据库中

使用达梦数据库的大字段前不得不说一下数据库大字段的性能问题:在数据库中,经常需要用到大字段类型,如Oracle中long、blob、clob,SQLServer中的text、image,MySql中的text、longtext、clob、blob以及达梦数据库中的clob、blob类型。存储的信息大概主要是两类,一类是长文本,如大段的文字,普通的varchar最长只能存储4K的数据,已经不能满足要

yanglilibaobao的专栏 2289

精通 Android NDK/JNI:从入门到精通实战与面试精粹

在Android开发中,

郑伟强dev的专栏 144

hibernate 保存 oracle 10g大数据字段

用spring+hiberante保存blob的时候,报Active Spring transaction synchronization or active JTA transaction with 'jtaTransactionManager' on LocalSessionFactoryBean required 这样的错,在网上查了一大堆资料后依然没有解决问题,后来看到一信息是这样写的: ...

tcrct 224

本地通知与健康数据的隐私保护方案

随着移动健康(mHealth)应用的普及,本地通知与健康数据的结合为用户提供了更加个性化的健康管理体验。然而,这种便利性也带来了严峻的隐私保护挑战。本文旨在探讨如何在移动应用中实现本地通知功能的同时,确保用户健康数据的隐私安全。本地通知与健康数据结合的技术架构隐私保护的核心技术方案具体算法实现与数学模型实际应用案例分析本文首先介绍背景知识和核心概念,然后深入探讨隐私保护的技术方案,包括算法原理和数学模型。接着提供实际代码实现和应用场景分析,最后讨论未来发展趋势和挑战。

移动开发前沿的博客 1308

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

hibernate 写入 clob, Blob

import java.io.FileInputStream; import java.io.OutputStream;import org.hibernate.Hibernate; import org.hibernate.LockMode; import org.hibernate.Session; import org.hibernate.Transaction; import org.

银狐的专栏 863

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hibernate对clob和blob的操作

static Session session = HibernateSessionFactory.getSession(); public boolean inserted(TUser obj) {  Transaction tran = session.beginTransaction();  session.save(obj);  session.flush();//调用flush强制

Bob@优快云 959

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

mysql blob hibernate_Hibernate保存Blob和Clob类型的数据

虽然非常不建议在数据库中保存Blob和Clob类型的数据,但真的要有这样的需求呢?这里记录一下使用Hibernate如何向数据库中保存Blob和Clob数据。Oracle和MySql在Blob类型上没什么区别,但是Mysql没有Clob类型,取而代之的是Text类型,所以这里还有点区别。BLOB在数据库中是以二进制的形式存在的,所以无法直接看到,如果是图片的话,使用一些数据库管理软件还是可以看到图...

weixin_35932973的博客 430

如何使用Hibernate 保存Clob 和Blob

今天书上让用ORACLE数据库建表,有个CLOB类型,,不知道到底怎么保存,用String也不行,,当时就怒了。。。 注意:目前只能操作Clob,因为不想用Session直接操作!  Clob在数据库中一般都是用来保存大文本字段的,Blob则是保存二进制流这样的!  1、Hibernate操作Clob字段  A.在实体Bean中将Clob字段声明为Str

627

BLOB/CLOB类型在HIBERNATE中的应用

    为什么需要clob/blob对象?         在实际的项目开发过程当中,有时候需要存取比较大的数据。而在oracle中,varchar2的长度不能够满足需求,因此就得需要用到clob/blob。    BLOB/CLOB在HIBERNATE中的如何应用?          为了更好的理解,我们举一个文章发布的例子做为讨论。          实体类(POJO)MessageA

黄贻军[bluesunny]的专栏 973

Hibernate4 Blob Clob图片保存到数据库和读取

Hibernate4 Blob Clob图片保存到数据库和读取 /保存图片到数据库 static void save(){ HibernateUtilutil=new HibernateUtil(); Sessionsession=util.getSession(); Transactiontran=session.beginTransaction(); Student1s=new Student1(); try { InputStr

_小点的博客 1879

用hibernate存入和写出Blob、Clob

Person .java package www.youkuaiyun.com.blank.bean; import java.io.Serializable; import java.sql.Blob; import java.sql.Clob; public class Person implements Serializable{ /** * */ private st

yanmei的专栏 2874

Hibernate 操作Blob Clob

Photo.java Java代码   import java.sql.Blob;    import java.sql.Clob;    import java.util.Date;       /**    * @author IBM 这是一个用于测试Hibernate大对象操作的PO    *     *         这是一个测试POJO, 属...

开发笔记 149

hibernate映射clob blob字段

在许多情况下要存储大型字符串或者二进制数据如图片等hibernate也提供了对blob和clob类型的支持 blob采用单字节存储适合保存二进制数据,如图片文件clob采用多字节存储适合保存大型文本等 在mssql中 image和ntext分别对应着blob和clob 表映射文件对两种类型的写法 对于blob格式的映射类型为type="java.sql.Clob";

pingchagnxin007的专栏 743

hibernate 操作clob,blob对象

转自:http://hpingliu.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-144245-uid-48802.html] 作为测试,我们新建一个TUser对象,其image属性中,保存了一个图片文件的二进制内容。而其resume属性,我们以一个简单的字符串作为填充。 1 TUser user = new TUser(); 2 3...

friping的专栏 194
上一篇: hibernate 操作clob,blob对象
下一篇: HTML表单Form中的get和post方法
friping
博客等级 码龄20年 0粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值