Spring+hibernate对clob、blob字段的处理方法

     今天在开发项目的时候遇到CLOB字段的问题,和平时的String字段一样处理发现HQL的查询结果是NULL,到网上查找了一些资料,处理方式作了一些修改以后,数据成功显示,现总结配置如下:

  1.spring的配置文件 (applicationContext-hibernate.xml)

          说明,这是我们系统中的文件名,不同系统会有不同,主要是Spring+hibernate 结合,sessionfactory的注入的配置:

   <bean id="sessionFactory"
          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
         <property name="dataSource" ref="dataSource" />  
        <property name="lobHandler">
                <ref bean="oracleLobHandler" />
         </property>

        <property name="mappingResources">

              <list> <value>aicu/application/vimp/model/sys/tbl/AiUploadLog.hbm.xml</value></list>

        </property>

 

         <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                      org.hibernate.dialect.Oracle9Dialect
               </prop>
                <prop key="hibernate.show_sql">false</prop>
                <!-- Create/update the database tables automatically when the JVM starts up
                <prop key="hibernate.hbm2ddl.auto">update</prop> -->
             <!-- Turn batching off for better error messages under PostgreSQL
                <prop key="hibernate.jdbc.batch_size">0</prop> -->
          </props>
           </property>

 </bean>

<bean id="oracleLobHandler"
           class="org.springframework.jdbc.support.lob.OracleLobHandler">
    <property name="nativeJdbcExtractor">
          <ref local="nativeJdbcExtractor" />
    </property>
 </bean>

 <bean id="nativeJdbcExtractor"
         class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor">
 </bean>

 

  请注意:oracleLobHandler,nativeJdbcExtractor,注意蓝色配置

 

SpringHibernate其实都提供了透明处理Clob的方法:   具体做法为:
  (1)在sessionFactory中加入lobHandler的注射:

  1. <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  2.         <property name="dataSource" ref="dataSource"/>
  3.         <property name="lobHandler" ref="lobHandler"/>
  4.         <property name="mappingResources">
  5.                   <value>xxx.hbm.xml</value>
  6.                   .....
  7.          </property>
  8. </bean>

    (2).定义这个lobHandler,值得注意的是这里有Oracle的版本区别:

        提示: 指定lobHandler时,对于MySQL、DB2、MS SQL Server、Oracle 10g,使用DefaultLobHandler即可.

                   而Oracle 9i,则可以使用OracleLobHandler。因为Oracle9i处理lob的方式和不太一样,所以这里要用spring提供的SimpleNativeJdbcExtractor.处理Oracle9i lob类型的特殊声明:

      

    2.  *.hbm.xml配置修改如下:
       a:操作blob,java类的成员变量类型设置为byte[],映射文件设置为:

    org.springframework.orm.hibernate3.support.BlobByteArrayType
       b:操作clob,java类的成员变量类型设置为String,映射文件设置为:
    org.springframework.orm.hibernate3.support.ClobStringType

       <property
                name="xmldata"
                type="org.springframework.orm.hibernate3.support.ClobStringType"
                update="true"
                insert="true"
                access="property"
                column="XMLDATA"
                not-null="false"
                unique="false"
            />

     

     

     

    3.  在领域对象的hbm中对应的Clob字段应该使用这样的定义:  

     public  HelloWorld {

           private   String  xmlData;

           //setter和getter

    }

        完毕 ok!

  1. <bean id="lobHandler" lazy-init="true"          class="org.springframework.jdbc.support.lob.OracleLobHandler">
  2.         <property name="nativeJdbcExtractor">
  3.             <ref bean="nativeJdbcExtractor"/>
  4.         </property>
  5. </bean>
  6. <bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值