Hibernate中处理Oracle中大数据Clob类型

本文介绍了一种在Hibernate框架下处理Oracle数据库CLOB类型的方法,包括如何将歌词内容保存为CLOB类型,并提供了具体的DAO实现类及配置文件示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日开发后台音档系统,需要把歌词内容插入到一个大数据类型中CLOB中去。运用传统的插入与更新不能实现,于是在网上搜索整理。主要说下使用方法
实体类:
public class MtopProduct implements Serializable {

private Clob lyricclob;

private String words;
private String melod;

//是Clob数据类型的附加一个字段,数据库中无此字段,也无需在配置文件中配置,主要是在DAO方法中运用来操作Clob类型
private String lyricClobString;
//省略了get和set方法
}

根据网上的内容,自己写了一个DAO类,在SAVE和UPDATE方法中专门类处理Clob类型。

public class MtopProductDao extends DAO {
private static Log log =LogFactory.getLog(MtopProductDao.class);

@Override
protected Class getBeanClass() {
return MtopProduct.class;
}

public MtopProductDao(){

}

/**
* 通过ID得到对象
* @param id
* @return
*/
public MtopProduct load(int id){
return (MtopProduct)super.load(id);
}

public boolean saveObject(Object obj)
{
//更新前首先要清空原clob字段的内容
if (obj == null)
{
return false;
}

MtopProduct productBean = (MtopProduct )obj;

try
{
beginTransaction();

productBean.setLyricClob(oracle.sql.CLOB.empty_lob());
getSession().save(productBean);
getSession().flush();
getSession().refresh(productBean, org.hibernate.LockMode.UPGRADE);

SerializableClob sc = (SerializableClob)productBean.getLyricClob();
java.sql.Clob wrapclob = sc.getWrappedClob();
oracle.sql.CLOB clob = (oracle.sql.CLOB)wrapclob;
clob.putString(1, productBean.getLyricClobString());

getSession().save(productBean);

commit();
return true;
}
catch (Exception er)
{
er.printStackTrace();
if (log.isErrorEnabled()) {
log.error("对‘对像’进行持久化时出错..." + getBeanClass().getName());
log.error("错误信息提示" + er.getMessage());
}
rollback();
}
return false;
}
public boolean updateObject(Object obj)
{
if (obj == null)
{
return false;
}

MtopProduct productBean = (MtopProduct)obj;

//初始化LyricClob字段
productBean.setLyricclob(org.hibernate.Hibernate.createClob(" "));

try
{
beginTransaction();

productBean.setLyricclob(oracle.sql.CLOB.empty_lob());
getSession().save(productBean);
getSession().flush();
getSession().refresh(productBean, org.hibernate.LockMode.UPGRADE);

SerializableClob sc = (SerializableClob)productBean.getLyricclob();
java.sql.Clob wrapclob = sc.getWrappedClob();
oracle.sql.CLOB clob = (oracle.sql.CLOB)wrapclob;
clob.putString(1, productBean.getLyricClobString());

getSession().save(productBean);

commit();
return true;
}
catch (Exception er)
{
er.printStackTrace();
if (log.isErrorEnabled()) {
log.error("对‘对像’进行持久化时出错..." + getBeanClass().getName());
log.error("错误信息提示" + er.getMessage());
}
rollback();
}
return false;
}

hbm.xml配置文件:
<property name="lyricclob" type="java.sql.Clob">
<column name="LYRICCLOB"/>
</property>
<property name="words" type="java.lang.String">
<column name="WORDS" length="20"/>
</property>
<property name="melod" type="java.lang.String">
<column name="MELOD" length="20"/>
</property>

方法调用:
mp =mpdao.load(sid);

mp.setWords(words);

mp.setMelod(melod);

mp.setLyricClobString(lrccontent); //直接插入值到此附加值中
strFlag= mpdao.updateObject(mp);

此些代码主要是自己开发所用,经验尚浅,一定存在很多漏洞,错误之处,希望大家多提意见,多多指教,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值