spring+hibernate里面操作clob字段

 

<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就非常方便了:
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 这个错误

 

 

时间: 2024-09-17 03:29:08

spring+hibernate里面操作clob字段的相关文章

clob-如何用hibernate读取Clob字段

问题描述 如何用hibernate读取Clob字段 请问大家,如何通过hibernate读取数据库中Clob字段呢?听说最新的hibernate已经添加对这个的支持了,但是我没找到如何使用. 我用下面这段代码读取Clob字段时,一直报错 " ORA-00932: 数据类型不一致: 应为 -, 但却获得 CLOB" 我用的如下代码,在list=query.list();语句处报错,不能正确读取Clob字段,请教如何编写能正确读取这种字段的代码! public static List da

spring hibernate jpa 用findAll的时候,取出的所有的string类型的字段都是空字符串

问题描述 spring hibernate jpa 用findAll的时候,取出的所有的string类型的字段都是空字符串 但数据库中是有值的,int值可以选出{""id"":18187no"":""""parent_id"":11654name"":""""route"":"""

struts+spring+hibernate是由谁来操作数据库的?

问题描述 struts+spring+hibernate是由谁来操作数据库的? 解决方案 解决方案二:hibernate解决方案三:非常感谢你的答案.解决方案四:我想加你QQ解决方案五:是lZ你自己操作的...hibernate只是封装好那些东西而已...嘻嘻~~~解决方案六:hibernate提供了很多接口,用于数据库的操作,struts主要处理业务逻辑,spring就是把struts和hibernate很好的结合起来解决方案七:在Strutshibernatespring的开发中struts

用jsp对oracle的clob字段进行操作

js|oracle CLOB一般用来存放超大广西,如果是2进制文件一般用BLOB.假设col2是CLOB:写操作: String sql = "insert into tb_commendtemp (col1,col2) values('111',?)";string s = "长文本";StringBufferInputStream sbin = new StringBufferInputStream(s);PreparedStatement ps = query

Struts+Spring+Hibernate实现上传下载

上传|下载 引言 文件的上传和下载在J2EE编程已经是一个非常古老的话题了,也许您马上就能掰着指头数出好几个著名的大件:如SmartUpload.Apache的FileUpload.但如果您的项目是构建在Struts+Spring+Hibernate(以下称SSH)框架上的,这些大件就显得笨重而沧桑了,SSH提供了一个简捷方便的文件上传下载的方案,我们只需要通过一些配置并辅以少量的代码就可以完好解决这个问题了. 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序.SS

exception-数据库使用CLOB字段类型时

问题描述 数据库使用CLOB字段类型时 九月 14, 2015 3:06:59 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [appServlet] in context with path [/UnderwritingApp] threw exception [Handler processing failed; nested exception is jav

JSF+Spring+Hibernate的实例讲解

js 使用JavaServer Faces(JSF).Spring Framework和Hibernate建立一个真实的Web应用程序内容概要使用JSF建立一个真实的Web应用程序不是没有意义的任务,这篇文章介绍了如何将JSF与Sping Framework和Hibernate集成,并且给出了使用这些技术建立这个真实的Web应用程序的最佳实践和设计指导 JavaServer Faces(JSF)技术是J2EE应用程序的一个新的用户接口框架,它非常适合基于MVC(Model-View-Contro

浅谈如何结合JDBC事务与Spring+Hibernate

问题:客户在其数据库操作过程中需要调用我们的工作流接口,这样就需要将我们的工作流操作与他 们的业 务操作置于同一个事务中.我们的服务采用的都是spring的声明式事务,而客户采用的是对 connection进行事务处理. 如何保证JDBC事务的一致性? 想到的解决方案一:使用jta事务,用tomcat+jotm提供事务管理器.为什么一开始就想到要使用jta事 务??实际上我们和客户都是使用的同一个数据库,为了方便,各自使用了不同的数据库连接方式,使用 jta的话确实有bt的意思在里面.但是事实上

Master-Slave,Spring,Hibernate,故事曲折离奇,情结跌宕起伏

/** *作者:张荣华 *日期:2008-02-05 **/ 前言,这篇文章写于08年12月份,现在发布出来望同行点评 ------------------------------------------------------------ 本文将要阐述或者讨论的是spring+hibernate和mysql的master-slave模式之间的一些不得不说的故事. 那么开始之前,按照惯例,我们要介绍一下这个两个东西 1,Hibernate,按照惯例,我们不介绍大家都知道的东西. 2, Maste