@hunter129

          天天學(xué)習(xí),好好向上!

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            21 隨筆 :: 5 文章 :: 37 評論 :: 0 Trackbacks
          項目中用到 長文本作為內(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)當(dāng)content 字段的內(nèi)容在 1000~2000 字符長度中間的時候出現(xiàn) sql錯誤
          而文本長度小于1000 長于2000 都沒有問題
          問題:hibernate配置中l(wèi)ength="10000"屬性是做什么用的?我嘗試過 將他配置成1000,5000,1w或者不配置 最后執(zhí)行的結(jié)果都一樣

          資料 google baidu。。。
          一般認(rèn)為 length指定的是text的最大長度,這里顯然不是
          又有認(rèn)為 是將java中string 值當(dāng)作clob處理的最小長度,也就是當(dāng)string長度小于這個值的時候 當(dāng)string處理,當(dāng)string大于這個長度的時候當(dāng)text(clob)處理。但是我將length設(shè)置為1000時,輸入1k+文本 依然有sql錯誤。超過2000卻沒有問題。
          so..這兩個都不是答案.
          又有人說,介個是jdbcbug 換成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ù)庫平臺的 方案~~
          posted on 2008-01-28 15:48 hunter129 閱讀(4194) 評論(7)  編輯  收藏 所屬分類: 基礎(chǔ)

          評論

          # re: hibernate 映射 clob字段 2008-02-22 14:55 楊愛友
          根據(jù)我的感覺,hibernate配置里所有的length在程序中都是沒用的,可有可無,他的作用好象是在必要的時候生成數(shù)據(jù)庫用。  回復(fù)  更多評論
            

          # re: hibernate 映射 clob字段 2008-03-04 13:33 落Nicety
          @楊愛友
          恩 貌似是給那些 根據(jù)hibernate配置文件生成 sql的工具用的~~
          不過還沒找到官方的說明~~  回復(fù)  更多評論
            

          # re: hibernate 映射 clob字段 2008-06-03 19:28 使用該方法
          按照您說的做了 報c3P0的錯誤   回復(fù)  更多評論
            

          # re: hibernate 映射 clob字段 2008-06-03 21:23 落Nicety
          @使用該方法
          是不是其他地方配置的不對?有沒有詳細(xì)點的錯誤信息  回復(fù)  更多評論
            

          # re: hibernate 映射 clob字段 2008-10-20 17:31 膚,淺 ヽ
          按你說的做了,但是我的添加和修改都不能用啦!我已添加或者修改老報錯!  回復(fù)  更多評論
            

          # re: hibernate 映射 clob字段 2008-10-20 17:32 膚,淺 ヽ
          是type Exception report 500

          message

          description The server encountered an internal error () that prevented it from fulfilling this request.

          exception

          javax.servlet.ServletException: java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with specified [javax.transaction.TransactionManager] required
          org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
          org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
            回復(fù)  更多評論
            

          # re: hibernate 映射 clob字段 2008-10-27 14:41 落Nicety
          @膚,淺 ヽ
          看異常信息 應(yīng)該是沒有配置事物管理器
          加上這個配置
          <bean id="transactionManager"
          class="org.springframework.orm.hibernate3.HibernateTransactionManager">
          <property name="sessionFactory" ref="sessionFactory" />
          <property name="nestedTransactionAllowed"> <value>true</value> </property>
          </bean>  回復(fù)  更多評論
            

          主站蜘蛛池模板: 巩留县| 蒙阴县| 台东县| 通州区| 临夏县| 安阳县| 泰宁县| 宜兰市| 东平县| 巴东县| 二连浩特市| 汝阳县| 绥中县| 定日县| 黄浦区| 武强县| 织金县| 高尔夫| 吉安市| 柞水县| 阜南县| 米易县| 丁青县| 塘沽区| 龙口市| 威海市| 耒阳市| 曲阜市| 正阳县| 东辽县| 巴林左旗| 抚州市| 静乐县| 耿马| 彭山县| 桓台县| 保亭| 濮阳市| 衡水市| 临桂县| 南京市|