項目中用到 長文本作為內(nèi)容
pojo中使用 string 類型
數(shù)據(jù)庫 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>
發(fā)現(xiàn)當content 字段的內(nèi)容在 1000~2000 字符長度中間的時候出現(xiàn)
sql錯誤
而文本長度小于1000 長于2000 都沒有
問題。
問題:hibernate配置中l(wèi)ength="10000"屬性是做什么用的?我嘗試過 將他配置成1000,5000,1w或者不配置 最后執(zhí)行的結(jié)果都一樣
查
資料 google baidu。。。
一般認為 length指定的是text的最大長度,這里顯然不是
又有認為 是將java中string 值當作clob處理的最小長度,也就是當string長度小于這個值的時候
當string處理,當string大于這個長度的時候當text(clob)處理。但是我將length設(shè)置為1000時,輸入1k+文本
依然有sql錯誤。超過2000卻沒有問題。
so..這兩個都不是答案.
又有人說,介個是
jdbc的
bug 換成10g的就米有問題了。遂嘗試..未果,問題依舊。
finally..這個length屬性到底干嘛用 沒搞清楚.. 抑或 不該這么配置?
繼續(xù)尋找,找到另外一種解決辦法。可以通過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是關(guān)鍵
然后在sessionFactory的bean中加入
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="lobHandler">
<ref bean="oracleLobHandler" />
</property>
。。。其他
</bean>
問題解決,但是length="10000" 屬性依然無用,可正常插入 任意長度的字符串
但是這樣的話 數(shù)據(jù)庫就不能跨平臺了..so 期待跨數(shù)據(jù)庫平臺的 方案~~