posts - 33,  comments - 11,  trackbacks - 0
          今天在開發(fā)項(xiàng)目的時(shí)候遇到CLOB字段的問題,和平時(shí)的String字段一樣處理發(fā)現(xiàn)HQL的查詢結(jié)果是NULL,到網(wǎng)上查找了一些資料,處理方式作了一些修改以后,數(shù)據(jù)成功顯示,現(xiàn)總結(jié)配置如下:

          applicationContext.xml配置修改如下:
          <bean id="sessionFactory"    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
             <property name="hibernateProperties">
               <props>
                <prop  key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
               </props>
            </property>
            <property name="dataSource">
               <ref bean="dataSource" />
            </property>
            <property name="configLocation">
               <value>classpath:hibernate.cfg.xml</value>
            </property>
            <property name="lobHandler">
               <ref bean="oracleLobHandler" />
            </property>


          </bean>


          <!-- 使用spring+hibernate處理oracle BLOB-->
          <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
            <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
            <property name="nativeJdbcExtractor">
             <ref bean="nativeJdbcExtractor" />
            </property>
          </bean>
          <!-- 完畢-->
          請(qǐng)注意:oracleLobHandler,nativeJdbcExtractor,oracleLobHandler



          3:這個(gè)時(shí)候我們操作起blob,clob就非常方便了:

             *.hbm.xml配置修改如下:
             a:操作blob,java類的成員變量類型設(shè)置為byte[],映射文件設(shè)置為:


          org.springframework.orm.hibernate3.support.BlobByteArrayType
             b:操作clob,java類的成員變量類型設(shè)置為String,映射文件設(shè)置為:
          org.springframework.orm.hibernate3.support.ClobStringType

          使用的時(shí)候不用額外考慮,可以直接象平常使用就可以了。很方便!



              Spring或Hibernate其實(shí)都提供了透明處理Clob的方法:
              只是個(gè)人覺得用Spring的做法比hibernate更透明一點(diǎn)(hibernate2.16);
          具體做法為:
            1.在sessionFactory中加入lobHandler的注射:


          <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
                  <property name="dataSource" ref="dataSource"/>
                  <property name="lobHandler" ref="lobHandler"/>
                  <property name="mappingResources">
                            <value>xxx.hbm.xml</value>
                            .....
                   </property>
          </bean>
            2.定義這個(gè)lobHandler,值得注意的是這里有Oracle的版本區(qū)別:

          <bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.OracleLobHandler">
                  <property name="nativeJdbcExtractor">
                      <ref bean="nativeJdbcExtractor"/>
                  </property>
          </bean>


          <bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>
               因?yàn)镺racle9i處理Clob的方式和別的數(shù)據(jù)庫(kù)很不一樣,甚至與Oracle10g都不兼容,所以這里要用spring提供的SimpleNativeJdbcExtractor.如果使用Oracle10g的話,可以直接使用:

          <bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>
          對(duì)應(yīng)的應(yīng)該使用Oracle10g對(duì)應(yīng)的JDBC驅(qū)動(dòng).



          4.在領(lǐng)域?qū)ο蟮膆bm中對(duì)應(yīng)的Clob字段應(yīng)該使用這樣的定義:


          <property name="context" column="context"

              type="org.springframework.orm.hibernate.support.ClobStringType" length="1048576000"/>

              這里的length是字節(jié)了,不是長(zhǎng)度哦,最大可以設(shè)到2G.對(duì)應(yīng)的,該字段在領(lǐng)域?qū)ο笾兄苯由昝鞒蒘tring就可以了.當(dāng)對(duì)這個(gè)字段寫入長(zhǎng)數(shù)據(jù)時(shí)直接調(diào)用其set方法就可以了,Spring會(huì)自己幫你做余下的處理,讓你透明的處理Clob字段.




          5.業(yè)務(wù)邏輯層對(duì)該字段的操作必須需要在有事務(wù)管理的方法中使用,否則會(huì)報(bào):
          java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with 'jtaTransactionManager' on LocalSessionFactoryBean required 這個(gè)錯(cuò)誤
          posted on 2009-06-18 13:11 方濤升 閱讀(1137) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 安乡县| 格尔木市| 苍梧县| 朝阳区| 礼泉县| 托克逊县| 麻江县| 哈巴河县| 商河县| 永寿县| 长阳| 棋牌| 吐鲁番市| 石家庄市| 孝义市| 伊川县| 宁晋县| 乌什县| 留坝县| 宁阳县| 宁夏| 龙泉市| 江山市| 南涧| 共和县| 宣恩县| 宝山区| 苍溪县| 武川县| 厦门市| 鄂温| 孝感市| 华宁县| 无极县| 五常市| 黑山县| 梨树县| 平乐县| 勐海县| 绵阳市| 建始县|