项目中用到 长文本作为内容
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..这两个都不是答案.
又有人说,介个是
jdbc的
bug 换成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 期待跨数据库平台的 方案~~