spring+hibernate中处理oracle BLOB

5 篇文章 0 订阅
3 篇文章 0 订阅

 

1、配置hibernate:
   1.1、配置hibernate的持久类文件中对应的字段为byte[]类型
   2.2、配置hibernate的类映射文件中对应的字段type为

   org.springframework.orm.hibernate3.support.BlobByteArrayType
2、配置spring:
   2.1、配置nativeJdbcExtractor,如下:

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

   2.2、配置oracleLobHandler
      <bean id="oracleLobHandler"  class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
        <property name="nativeJdbcExtractor">
            <ref bean="nativeJdbcExtractor" />
        </property>
      </bean>

  2.3把oracleLobHandler加入sessionFactory中:
     <property name="lobHandler">
         <ref bean="oracleLobHandler" />
    </property>

3、总结:
   正确配置以上两条,就可以像处理普通的对象一样处理oracle的大对象。而且可以方面的从oracle上移植到支持大对象的其他数据库上,屏蔽了不同数据库处理lob字段的差别;

4、扩展:
   4.1、处理clob对象也很方便,在配置hibernate时把对应的类的属性字段配置为String,映射文件type配置为org.springframework.orm.hibernate3.support.ClobStringType就行了。

        <property name="context" column="context" type="org.springframework.orm.hibernate.support.ClobStringType" length="1048576000"/>

        这里的length是字节了,不是长度,最大可以设到2G.对应的,该字段在领域对象中直接申明成 String就可以了.当对这个字段写入长数据时直接调用其set方法就可以了,Spring会自己帮你做余下的处理,让你透明的处理Clob字段.

业务逻辑层对该字段的操作必须需要在有事务管理的方法中使用,否则会报:
java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with 'jtaTransactionManager' on LocalSessionFactoryBean required 这个错误

因为Oracle9i处理Clob的方式和别的数据库很不一样,甚至与Oracle10g都不兼容,所以这里要用spring提供的SimpleNativeJdbcExtractor.如果使用Oracle10g的话,可以直接使用:

<bean id="lobHandler" lazy-init="true"  class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>

对应的应该使用Oracle10g对应的JDBC驱动. 

如果使用以上方法开始报如下错误,把class12.jar换成ojdbc14.jar就ok了

04-24 15:31:33.242 WARN  [FileCopyUtils.java:237] Could not close Writer
java.io.IOException: 无法从套接字读取更多的数据 at oracle.jdbc.dbaccess.DBError.SQLToIOException(DBError.java:716)
 at oracle.jdbc.driver.OracleClobWriter.flushBuffer(OracleClobWriter.java:270)
 at oracle.jdbc.driver.OracleClobWriter.close(OracleClobWriter.java:232)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值