对于BLOG和CLOB字段,大部分数据库提供了较为透明的支持,但Oracle比较特殊一些,在用Spring和Hibernate操作时,需要作一些特殊的处理,以CLOB为例,基本有下面几个步骤[注:下面大部分内容来自于网络]:
1、在Spring的配置文件中加入以下几个Bean的定义
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>
<bean id="oracleLobHandle" class="org.springframework.jdbc.support.lob.OracleLobHandler" Lazy-init="true">
<property name="nativeJdbcExtractor">
<ref local="nativejdbcExtractor"/>
</property>
</bean>
2、在sessionFactory这个Bean中加入一个属性的引用
<property name="lobHandler"><ref bean="oracleLobHandle"/></property>
3、在需要clob的JavaBean对应的hbm.xml中,改对应的clob类型的字段
<property
name="XXX" type="org.springframework.orm.hibernate3.support.ClobStringType"
clumn=""
length="XXX" <!--定义clob字段大小(以字节为单位,最大2GB)-->
/>
4、 JavaBean的对应的属性类型为String。
基本上是这四个要点。需要注意两点:(1)如果使用Oracle9i自带的class12.jar这个JDBC驱动的话是不行的,会报错,据说要升级到classes12-9i.jar,我在Oracle的网站上没找到对应的下载,下载了ojdbc14.jar就可以了。(2)对Clob或Blog的操作必须在一个事务中进行,如在Dao层测试会出错,在配置了事务的Logic层就没问题了。
经过测试,如果用Oracle10g的JDBC驱动就没这么麻烦了,Hibernate+Oracle+CLOB的读写其实只要这样做:
1.在Oracle里设置某字段为clob类型。
2.在Hibernate的配置文件里使用网上下载的Oracle 10g最新的jdbc驱动。
3.实体类里把clob字段对应的属性类型设置为String。
4.hibernate的映射文件*.hbm.xml里把该字段对应的类型该为text。
然后就可以在程序里把它当成String随便用了。
补充:按照上面的方法又写了一个测试类,能够操作Clob字段了,但是启动JBOSS后就不能用了,后来找了很久才发现,原来我用的JBOSS的default/lib目录下也有一下老版本的Class12.jar,删除它换成最新的ojdbc14.jar就可以了。
posted on 2006-11-17 18:02
fish的Blog 阅读(1393)
评论(4) 编辑 收藏 所属分类:
hibernate