关于Clob类型在Hibernate中的应用小结(2) (2007-06-22 21:35:14)
4.2 CRUD的实现
4.2.1 创建(Create)
…………
public class MeetingHeadDAOHibernate extends BaseDAOHibernate
implements MeetingHeadDAO {
/**
* @author CZF
* Description:创建一个新的会议记要
*/
public Serializable createMeetingHead(MeetingHead mh)
throws DAOException {
try {
Session sess = HibernateHelper.currentTransaction();
Serializable result = sess.save(mh);
sess.flush();
//初始化SummaryClob字段
oracle.sql.CLOB clob = oracle.sql.CLOB.empty_lob();
mh.setSummaryClob(clob);
/*也可采用此方法进行初始化
mh.setSummaryClob (Hibernate.createClob(""));
*/
//此处一定要用lockMode.UPGRADE模式进行锁定刷新
sess.refresh(mh, LockMode.UPGRADE);
//获取MeetingHead实体的SummaryClobString属性值
String content = mh.getSummaryClobString();
//将获取的辅助字段的值通过oracle.sql.CLOB的putString()方法赋值给实体内的summaryClob字段
oracle.sql.CLOB clob = (oracle.sql.CLOB) mh.getSummaryClob();
clob.putString(1, content);
…………
HbernateHelper.endCurrentTransaction();
return result;
…………
4.2.2 更新(Update)
“更新”原理跟“创建”类似,但记住在更新前一定要先将原实体的clob类型的字段内容清空,然后再赋新值进去,否则会出现不能删除旧内容的情况。
…………
public class MeetingHeadDAOHibernate extends BaseDAOHibernate
implements MeetingHeadDAO {
/**
* @author CZF
* Description:更新一个新的会议记要
*/
public void updateMeetingHead(MeetingHead mh) throws DAOException {
Class clazz = this.getEntityClass();
try {
Session sess = HibernateHelper.currentTransaction();
// 首先通过锁模式把该实体读出来
MeetingHead oldMh = (MeetingHead) sess.load(clazz, mh.getId(),
LockMode.UPGRADE);
// 获取辅助字段的值
String newMhValue = mh.getSummaryClobString();
// 更新前首先要清空原clob字段的内容
oracle.sql.CLOB clob_empty = oracle.sql.CLOB.empty_lob();
oldMh.setSummaryClob(clob_empty);
// 必须要执行以下两步,否则将抛出“不能对空clob进行读写操作”的异常
sess.flush();
sess.refresh(oldMh, LockMode.UPGRADE);
//将获取的辅助字段的值通过oracle.sql.CLOB的putString()方法赋值给实体内的summaryClob字段
oracle.sql.CLOB clob = (oracle.sql.CLOB) oldMh.getSummaryClob();
clob.putString(1, newMhValue);
…………
}
…………
4.2.3 读取(Read)
…………
public class MeetingHeadDAOHibernate extends BaseDAOHibernate
implements MeetingHeadDAO {
/**
* @author CZF
* Description:读取一个会议记要
* /
public MeetingHead getMeetingHeadById(String id)
throws BusinessException, SQLException {
MeetingHead mh = (MeetingHead) service.getMeetingHeadById(id);
//获取实体的Clob字段的值
java.sql.Clob clob = mh.getSummaryClob();
//将获取的Clob值通过java.sql.Clob的getSubString()方法赋值给实体的 辅助字段
if (clob != null) {
String b1 = clob.getSubString(1, (int) clob.length());
mh.setSummaryClobString(b1);
}
return mh;
}
4.2.4 删除(Delete)
由于删除操作不需要对Clob类型作特殊处理,只要通过id找出相应的实体删掉就行,具体代码在此就不列出了。
5. 参考文献
[1]、[2] http://udoo.51.net/mt/archives/000071.html 山南水北weblog ;
[3] Oracle API Documentation ;
[4] Overview (Hibernate API Documentation) ;
[5] Overview (Java 2 Platform SE v1.4.2 API Documentation)
附录
1、如何对CLOB字段进行全文检索?
习惯了使用%来进行模糊查询,可发现在CLOB上行不通了,原来CLOB的查询是有专门的LOB操作工具的。
说明: CLOB字段可以select,但select时不可以使用where
SQL> create table a(a clob);
SQL> insert into a values('1234');
SQL> insert into a values('5648');
SQL> select *from a;
1234
5648
SQL> select * from a where a like '%12%';
select * from a where a like '%12%'
*
ERROR 位于第 1 行:
ORA-00932: 数据类型不一致
SQL> SELECT * FROM A WHERE dbms_lob.instr(a.a,'12',1,1)>0;
1234
SQL> SELECT * FROM A WHERE dbms_lob.instr(a.a,'5',1,1)>0;
5648
Robbin观点
Oracle9iR2和Oracle10G以上版本已经可以直接进行clob的插入,条件查询,模糊查询了。这一点,你可以试一试,我这周周一刚刚在Oracle10.1.0.3 Linux x86上面试过,不管是where还是like,就像varchar2一样处理。
另外将Oracle JDBC Driver升级到最新的版本,即Oracle10.1.0版本同时发布的odjbc14.jar,那么你将直接可以对clob进行操作。即
java代码:
.....
pstmt.setString(x, 'xxxxx'); // 不需要setClob
.....
....
pstmt.getString(x,'xxx'); // 不需要getClob
....
也就是说,如果你使用最新的Oracle JDBC Driver,使用比较新的Oracle版本,你就可以直接像操作varchar2那样操作clob,没有任何限制了。
分享到:
相关推荐
在Java世界中,尤其是在持久化框架Hibernate中,处理Clob类型的数据需要特别的方法和配置。 在Hibernate中,Clob类型的字段通常有两种处理方式: 1. **传统JDBC方式**: 在这种模式下,开发者需要直接操作Clob...
关于Clob类型在Hibernate中的应用小结.doc
在Hibernate框架中,Clob类型的字段处理是数据库操作中的一个关键环节,尤其是在处理大量文本数据时。以下是对Oracle Clob在Hibernate中应用的详细总结: 3.1 传统的JDBC方式: 在没有使用ORM框架之前,我们通常...
本篇文章将探讨在Hibernate中如何使用Clob类型来处理大文本数据,主要涉及Clob类型的概念、使用场景、在Hibernate中的配置以及一些注意事项。 Clob(Character Large Object)是SQL标准定义的一种数据类型,用于...
通常,要解决超过4000字节的数据,一种做法是将数据写入文件,xml或plain file都可以,数据...另一个做法是使用clob, blob等字段类型,主要有:采用传统的jbdc方式、把clob以string方式处理、直接使用clob类型三种方案
第3章 第一个Hibernate应用 3.1 创建Hibernate的配置文件 3.2 创建持久化类 3.3 创建数据库Schema 3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到...
第3章 第一个Hibernate应用 3.1 创建Hibernate的配置文件 3.2 创建持久化类 3.3 创建数据库Schema 3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到...
第3章 第一个Hibernate应用 3.1 创建Hibernate的配置文件 3.2 创建持久化类 3.3 创建数据库Schema 3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到...
第3章 第一个Hibernate应用 3.1 创建Hibernate的配置文件 3.2 创建持久化类 3.3 创建数据库Schema 3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到...
12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务...
12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务...
#### 五、小结 通过上述示例,我们了解了如何使用 Hibernate 注解来快速实现 Java 对象与数据库表之间的映射。这些注解大大简化了实体类的定义,同时也提供了足够的灵活性来处理复杂的业务需求。对于初学者而言,...
在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect ...
在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect ...