hibernate操作clob

<property name="notetext" column="NOTETEXT" type="&amp;lt;font color=">
java 代码
  1. hibernate映射文件:   
  2.   
  3. 其中:notetext在数据库中是clob型,它映射的type为org.springframework.orm.hibernate3.support.ClobStringType   
  4.   
  5. <?xml version="1.0" encoding='UTF-8'?>   
  6. <!DOCTYPE hibernate-mapping PUBLIC   
  7.                             "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  8.                             "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >   
  9.   
  10. <!-- DO NOT EDIT: This is a generated file that is synchronized -->   
  11. <!-- by MyEclipse Hibernate tool integration.                   -->   
  12. <!-- Created Wed Sep 21 13:14:31 CST 2005                         -->   
  13. <hibernate-mapping package="cn.cityyouth.bbs.entity">   
  14.   
  15.     <class name="BbsSendnote" table="BBS_SENDNOTE">   
  16.        <id name="noteid" column="NOTEID" type="java.lang.Long">   
  17.             <generator class="sequence">   
  18.             <param name="sequence">seq_sendnote</param>   
  19.             </generator>   
  20.         </id>   
  21.   
  22.  <property name="notetext" column="NOTETEXT" type="org.springframework.orm.hibernate3.support.ClobStringType" />   
  23.   
  24.    </class>   
  25.        
  26. </hibernate-mapping>   
  27.   
  28. application.xml   
  29.   
  30. <?xml version="1.0" encoding="UTF-8"?>   
  31. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"  
  32.     "http://www.springframework.org/dtd/spring-beans.dtd">   
  33.   
  34. <beans>   
  35.  <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">   
  36.         <property name="nativeJdbcExtractor"><ref local="nativeJdbcExtractor"/></property>   
  37.     </bean>   
  38.   
  39.     <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor">   
  40.     </bean>//  这俩个bean是关键   
  41.  <bean id="sessionFactory"  
  42.   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
  43.   <property name="dataSource">   
  44.    <ref bean="dataSource" />   
  45.   </property>   
  46.   <property name="lobHandler">   
  47.    <ref bean="oracleLobHandler" />   
  48.   </property>    
  49.      <property name="mappingResources">   
  50.    <list>   
  51.     <value>cn/cityyouth/bbs/entity/BbsSendnote.hbm.xml</value>   
  52.      </list>   
  53.   </property>   
  54.   
  55.   <property name="hibernateProperties">   
  56.    <props>   
  57.     <prop key="hibernate.dialect">   
  58.      org.hibernate.dialect.Oracle9Dialect   
  59.     </prop>   
  60.     <prop key="hibernate.show_sql">true</prop>   
  61.     <!-- Create/update the database tables automatically when the JVM starts up   
  62.      <prop key="hibernate.hbm2ddl.auto">update</prop> -->   
  63.     <!-- Turn batching off for better error messages under PostgreSQL    
  64.      <prop key="hibernate.jdbc.batch_size">0</prop> -->   
  65.    <prop key="hibernate.jdbc.batch_size">15</prop>   
  66.    </props>   
  67.   </property>   
  68.  </bean>   
  69.   
  70. </beans>   
  71.   
  72. 通过这样配置你在实体bean里可以把clob字段当作String类型来处理,实体类如下:   
  73.   
  74. public class BbsSendnote   
  75.     implements Serializable   
  76. {   
  77.   
  78.        
  79.     private Long noteid;   
  80.     private String notetext;   
  81.   
  82. public void setNoteid(Long noteid){   
  83.   
  84. this.noteid=noteid;   
  85.   
  86. }   
  87.   
  88. public Long getNoteid(){   
  89.   
  90. return this.noteid   
  91.   
  92. }   
  93.   
  94. public String getNotetext()   
  95.     {   
  96.         return notetext;   
  97.     }   
  98.   
  99.     public void setNotetext(String notetext)   
  100.     {   
  101.         this.notetext = notetext;   
  102.     }   
  103.   
  104. }   
  105.   
  106. 在以后的类中操作clob字段,就和操作Stirng类型字段一样了!   
</property>

在测试DLOG4J对Oracle数据库(Oracle 9i R2)的支持时候发现,当表中使用大文本字段CLOB的时候,映射时候类型填写为text,程序出现了下面的两个问题:

首先出现的问题是:不允许的操作: streams type cannot be used in batching

该问题的解决办法比较简单,需要修改使用到大文本对象的batch_size值为0,也就是不使用批操作。

修改配置后再次启动DLOG发现的问题是,当写一篇日记时,日记较小时数据插入成功,当日记内容很长的时候数据插入失败。

解决的办法是在CLOB字段的映射条目中增加参数length,例如

<property name="content" type="text" length="100000"/>

如此两个问题得以解决,其他的功能在Oracle数据库中工作一切正常。

另外还有一个应该注意的是size是Oracle的关键字,不要拿它当作字段名,否则报的错误很怪,很难一眼看出来具体问题所在。

Hi.

I wrote this in my hibernate.properties and works;

hibernate.jdbc.use_streams_for_binary=true
hibernate.jdbc.batch_size=0

Good luck!

改用Oracle 10g的驱动就能解决Clob的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值