hibernate操作clob

阅读更多
java 代码
  1. hibernate映射文件:   
  2.   
  3. 其中:notetext在数据库中是clob型,它映射的type为org.springframework.orm.hibernate3.support.ClobStringType   
  4.   
  5. "1.0" encoding='UTF-8'?>   
  6.                             "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  7.                             "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >   
  8.   
  9.   
  10.   
  11.   
  12. package="cn.cityyouth.bbs.entity">   
  13.   
  14.     <class name="BbsSendnote" table="BBS_SENDNOTE">   
  15.        "noteid" column="NOTEID" type="java.lang.Long">   
  16.             class="sequence">   
  17.             "sequence">seq_sendnote   
  18.                
  19.            
  20.   
  21.  "notetext" column="NOTETEXT" type="org.springframework.orm.hibernate3.support.ClobStringType" />   
  22.   
  23.    class>   
  24.        
  25.   
  26.   
  27. application.xml   
  28.   
  29. "1.0" encoding="UTF-8"?>   
  30. "-//SPRING//DTD BEAN//EN"  
  31.     "http://www.springframework.org/dtd/spring-beans.dtd">   
  32.   
  33.   
  34.  "oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">   
  35.         "nativeJdbcExtractor">"nativeJdbcExtractor"/>   
  36.        
  37.   
  38.     "nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor">   
  39.     //  这俩个bean是关键   
  40.  "sessionFactory"  
  41.   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
  42.   "dataSource">   
  43.    "dataSource" />   
  44.      
  45.   "lobHandler">   
  46.    "oracleLobHandler" />   
  47.       
  48.      "mappingResources">   
  49.       
  50.     cn/cityyouth/bbs/entity/BbsSendnote.hbm.xml   
  51.         
  52.      
  53.   
  54.   "hibernateProperties">   
  55.       
  56.     "hibernate.dialect">   
  57.      org.hibernate.dialect.Oracle9Dialect   
  58.        
  59.     "hibernate.show_sql">true   
  60.        
  61.        
  62.    "hibernate.jdbc.batch_size">15   
  63.       
  64.      
  65.     
  66.   
  67.   
  68.   
  69. 通过这样配置你在实体bean里可以把clob字段当作String类型来处理,实体类如下:   
  70.   
  71. public class BbsSendnote   
  72.     implements Serializable   
  73. {   
  74.   
  75.        
  76.     private Long noteid;   
  77.     private String notetext;   
  78.   
  79. public void setNoteid(Long noteid){   
  80.   
  81. this.noteid=noteid;   
  82.   
  83. }   
  84.   
  85. public Long getNoteid(){   
  86.   
  87. return this.noteid   
  88.   
  89. }   
  90.   
  91. public String getNotetext()   
  92.     {   
  93.         return notetext;   
  94.     }   
  95.   
  96.     public void setNotetext(String notetext)   
  97.     {   
  98.         this.notetext = notetext;   
  99.     }   
  100.   
  101. }   
  102.   
  103. 在以后的类中操作clob字段,就和操作Stirng类型字段一样了!   

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

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

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

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

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

如此两个问题得以解决,其他的功能在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的问题

你可能感兴趣的:(Hibernate,Bean,Oracle,JDBC,Spring)