hibernate 映射 clob字段

hibernate 映射 clob字段
项目中用到 长文本作为内容
pojo中使用 string 类型 数据 oracle9i 用的的clob字段
pojo:

private  String content;
public   void  setContent(String content){
    
this .content  =  content;
}
hibernate配置
< property  name ="content"  column ="C_Content"  type ="text"  length ="10000" ></ property >

发现当content 字段的内容在 1000~2000 字符长度中间的时候出现 sql 错误
而文本长度小于1000 长于2000 都没有 问题
问题:hibernate配置中length="10000"属性是做什么用的?我尝试过 将他配置成1000,5000,1w或者不配置 最后执行的结果都一样

资料 google baidu。。。
一般认为 length指定的是text的最大长度,这里显然不是
又有认为 是将java中string 值当作clob处理的最小长度,也就是当string长度小于这个值的时候 当string处理,当string大于这个长度的时候当text(clob)处理。但是我将length设置为1000时,输入1k+文本 依然有sql错误。超过2000却没有问题。
so..这两个都不是答案.
又有人说,介个是 jdbcbug 换成10g的就米有问题了。遂尝试..未果,问题依旧。
finally..这个length属性到底干嘛用 没搞清楚.. 抑或 不该这么配置?

继续寻找,找到另外一种解决办法。可以通过spring来解决这个问题
hibernate配置
< property  name ="content"  column ="C_Content"  type ="org.springframework.orm.hibernate3.support.ClobStringType"
length
="10000" ></ property >

spring配置
< bean  id ="oracleLobHandler"  class ="org.springframework.jdbc.support.lob.OracleLobHandler" >    
        
< property  name ="nativeJdbcExtractor" >
            
< ref  local ="nativeJdbcExtractor" />
        
</ property >   
</ bean >    
< bean  id ="nativeJdbcExtractor"  class ="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" >    
</ bean >
上面2个bean是关键
然后在sessionFactory的bean中加入
< bean  id ="sessionFactory"
        class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
        
< property  name ="lobHandler" >    
            
< ref  bean ="oracleLobHandler"   />    
        
</ property >
        。。。其他
</ bean >


问题解决,但是length="10000" 属性依然无用,可正常插入 任意长度的字符串
但是这样的话 数据库就不能跨平台了..so 期待跨数据库平台的 方案~~

你可能感兴趣的:(hibernate 映射 clob字段)