`
icyheart
  • 浏览: 777279 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring+hibernate中clob、blob字段的处理方法

阅读更多

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

<bean id="sessionFactory"    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="hibernateProperties">
     <props>
      <prop  key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
     </props>
  </property>
  <property name="dataSource">
     <ref bean="dataSource" />
  </property>
  <property name="configLocation">
     <value>classpath:hibernate.cfg.xml</value>
  </property>
  <property name="lobHandler">
     <ref bean="oracleLobHandler" />
  </property>


 </bean>


 <!-- 使用spring+hibernate处理oracle BLOB-->
 <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
  <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
  <property name="nativeJdbcExtractor">
   <ref bean="nativeJdbcExtractor" />
  </property>
 </bean>

 
请注意:oracleLobHandler,nativeJdbcExtractor,oracleLobHandler

 

3:这个时候我们操作起blob,clob就非常方便了:

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


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

使用的时候不用额外考虑,可以直接象平常使用就可以了。很方便!

    Spring或Hibernate其实都提供了透明处理Clob的方法:
    只是个人觉得用Spring的做法比hibernate更透明一点(hibernate2.16);
具体做法为:
  1.在sessionFactory中加入lobHandler的注射:

 

<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="lobHandler" ref="lobHandler"/>
        <property name="mappingResources">
                  <value>xxx.hbm.xml</value>
                  .....
         </property>
</bean>

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

<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.OracleLobHandler">
        <property name="nativeJdbcExtractor">
            <ref bean="nativeJdbcExtractor"/>
        </property>
</bean>


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

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

 <bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>
对应的应该使用Oracle10g对应的JDBC驱动.

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

<property name="context" column="context" 

    type="org.springframework.orm.hibernate.support.ClobStringType" length="1048576000"/>

 

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

 


5.业务逻辑层对该字段的操作必须需要在有事务管理的方法中使用,否则会报:

java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with 'jtaTransactionManager' on LocalSessionFactoryBean required

  这个错误

 

分享到:
评论

相关推荐

    spring+hbernate对clob、blob字段的处理

    一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...

    spring+hibernate 解决大字段(clob)

    通过以上步骤,我们可以成功地在Spring与Hibernate框架中处理Oracle 10g数据库中的CLOB字段。这种方式不仅可以提高应用程序的效率,还能保证数据的完整性和一致性。此外,合理的配置和编码实践也能够进一步提升系统...

    Spring+Hibernate处理Oracle lob字段(一)

    在本文中,我们将深入探讨如何在Java环境下,利用Spring和Hibernate框架处理Oracle数据库中的LOB(Large Object)字段。LOB字段通常用于存储大体积的数据,如文本、图片或视频。在实际开发中,处理这类数据时可能会...

    spring+hibernate操作oracle的clob字段

    在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`lobHandler`属性,用于处理CLOB和BLOB类型的数据。这确保了Spring和Hibernate能够正确地与Oracle数据库交互处理大对象。 ```xml ...

    spring1.2+hibernate3对大字段的处理实例,供大家学习与交流,可直接运行

    总结来说,"spring1.2+hibernate3对大字段的处理实例"是一个宝贵的教育资源,它涵盖了Spring和Hibernate在处理大字段时的关键技术,以及如何在Eclipse环境中实现这些技术。通过对这个实例的学习和研究,开发者能够...

    spring1.2+hibernate2对大字段的处理实例

    Hibernate2支持将Java的`java.sql.Blob`和`java.sql.Clob`对象映射到数据库的Blob和Clob字段,这样可以存储大数据而不影响其他字段。 2. **文件系统存储**:大字段数据可以存储在文件系统中,然后在数据库中仅存储...

    oracle+hibernate 处理blob +uploadify实例

    在本示例中,我们将探讨如何使用Oracle数据库、Hibernate ORM框架以及Uploadify插件处理Blob类型的大数据,如图片或文件上传。Blob(Binary Large Object)是数据库中用于存储二进制大对象的类型,常用于存储图片、...

    java中(注解符)处理Clob(blob)类型

    Java 中处理 Clob 和 Blob 类型的注解配置是一种常见的处理大规模数据的方法。Clob(Character Large OBject)类型和 Blob(Binary Large OBject)类型是数据库中两种常用的大规模数据类型。Clob 类型用于存储大规模...

    ssh(structs,spring,hibernate)框架中的上传下载

    数据表Blob字段在Hibernate持久化映射文件中的type为org.springframework.orm.hibernate3.support.BlobByteArrayType,即Spring所提供的用户自定义的类型,而非java.sql.Blob。 3在Spring中使用org.springframework...

    hibernate使用中与各种数据库字段类型对应类型训练

    通过这次训练,你将深入理解Hibernate如何处理不同数据库字段类型,并学会如何在实际项目中灵活运用,提升开发效率和代码质量。记住,熟练掌握这些知识是成为一名高效Java开发者的必备技能之一。

    简单易行:Spring中操作LOB字段案例

    总结起来,本文通过一个简单的Spring案例展示了如何操作LOB字段,包括创建DAO方法,使用`JdbcTemplate`进行数据库操作,以及在Web应用中处理文件上传。同时,我们也了解了如何配置Spring的`JdbcTemplate`和数据库...

    Hibernate 多数据库支持解决方案

    - 当处理大量数据或大字段时,如BLOB或CLOB类型,需要注意内存管理和数据库性能。可以使用`lob`类型映射,或者考虑使用游标(Cursor)进行分批处理,以减少内存占用并提高性能。 5. **Hibernate主键生成器(数值型...

    Spring中文帮助文档

    在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. checkboxes标签 13.9.6. radiobutton标签 13.9.7. radiobuttons...

    hibernate注解

    - **@Lob**:用于大对象类型的字段,如BLOB、CLOB。 - **@Transient**:标记一个字段不会被持久化到数据库中。 #### 结合Spring框架使用Hibernate注解 在实际开发中,Hibernate经常与Spring框架结合使用,利用...

    把图片以数据的形式保存在数据库 上传图片

    7. **性能优化**:由于将图片保存为数据流可能导致数据库体积增大,影响查询性能,有时会采用BLOB或CLOB字段来存储大对象。但更优的做法是使用文件存储系统(如Amazon S3或自建的文件服务器),只在数据库中存储文件...

    hibernate-annotations-3.4.0.GA架包和slf4j-1.5.8架包

    @Temporal用于日期时间类型的映射,@Lob用于大对象(BLOB或CLOB)的映射。 3. **关系映射**:@OneToOne、@OneToMany、@ManyToOne、@ManyToMany注解分别用于一对一、一对多、多对一和多对多的关系映射,它们可以通过...

    Spring API

    在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. checkboxes标签 13.9.6. radiobutton标签 13.9.7. radiobuttons...

    使用SSH构建Web应用系统

    1. **LOB字段处理**:SSH提供了处理大对象(LOB)字段的方法,如BLOB和CLOB,确保大数据类型的存储和检索。 2. **文件上传**:SSH框架支持文件上传,通常通过Struts2的上传组件实现,需要注意文件大小限制和安全性...

    一些常用的有关java的chm文档

    10. **@Lob** - 处理大对象(BLOB或CLOB)的映射。 11. **@Transient** - 标记一个属性不被持久化,不会映射到数据库表。 12. **@Version** - 用于乐观锁,记录版本号以处理并发更新。 理解并熟练运用这些注解,...

Global site tag (gtag.js) - Google Analytics