背景

          在信息發(fā)布系統(tǒng)中,如果需要將用戶發(fā)布的信息保存到Oralcle9i數(shù)據(jù)庫中,使用varchar2(4000)有時是不夠用的,因為除了用戶錄入的內(nèi)容還要加上html編輯器附加的html標識,所以我建議使用clob。

          動手

          其實也挺簡單的:兩個配置、兩個注意

          1、hbm配置

          <hibernate-mapping>

                 <class name="com.wonders.pubinfo.bean.LawInfo" table="JZ_LAW_INFO">

                        <id column="ID" name="id" type="java.lang.String">

                               <generator class="uuid.hex"/>

                        </id>

                        <property column="TYPE" length="4" name="type" type="java.lang.String"/>

                        <property column="TITLE" length="200" name="title" type="java.lang.String"/>

                        <property column="KEYWORD" length="200" name="keyword" type="java.lang.String"/>

                        <property column="CONTENT" name="content" type="org.springframework.orm.hibernate.support.ClobStringType"/>

                        <property column="PUBLISH_TIME" length="23" name="publishTime" type="java.sql.Timestamp"/>

                        <property column="PRACTICE_TIME" length="23" name="practiceTime" type="java.sql.Timestamp"/>

                        <property column="END_TIME" length="23" name="endTime" type="java.sql.Timestamp"/>

                        <property column="FILE_NUM" length="50" name="fileNum" type="java.lang.String"/>

                        <property column="PUB_ORGAN" length="50" name="pubOrgan" type="java.lang.String"/>

                        <property column="TEMPLATE" length="20" name="template" type="java.lang.String"/>

                        <property column="VALIDITY" length="1" name="validity" type="java.lang.String"/>

                        <property column="HTML_FILE" length="50" name="htmlFile" type="java.lang.String"/>

                 </class>

          </hibernate-mapping>

          2、application配置

          <beans>

                 <!--**** Start of PERSISTENCE DEFINITIONS ****-->

            <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

              <property name="location">

                <value>init.properties</value>

              </property>

            </bean> 

           

            <!-- JDBC Connection -->

            <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

              <property name="driverClassName">

                <value>${datasource.driverClassName}</value>

              </property>

              <property name="url">

                <value>${datasource.url}</value>

              </property>

              <property name="username">

                <value>${datasource.username}</value>

              </property>

              <property name="password">

                <value>${datasource.password}</value>

              </property>

              <property name="maxActive">

                <value>${datasource.maxActive}</value>

              </property>

              <property name="maxIdle">

                <value>${datasource.maxIdle}</value>

              </property>

              <property name="maxWait">

                <value>${datasource.maxWait}</value>

              </property>

              <property name="defaultAutoCommit">

                <value>${datasource.defaultAutoCommit}</value>

              </property>

            </bean>

           

            <!--**** OracleLobHandler ****-->

            <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>

                

                 <!--**** SessionFactory Definition ****-->

                 <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">

                        <property name="dataSource">

                               <ref local="dataSource" />

                        </property>

                        <property name="lobHandler">

                               <ref bean="oracleLobHandler" />

                        </property>

                        <property name="mappingResources">

                               <list>

                                      <value>com\wonders\pubinfo\bean\LawInfo.hbm.xml</value>

                                      <value>com\wonders\pubinfo\bean\LawType.hbm.xml</value>

                               </list>

                        </property>

                        <property name="hibernateProperties">

                               <props>

                                      <prop key="hibernate.dialect">${hibernate.dialect}</prop>

                                      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>

                                      <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>

                                      <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>

                               </props>

                        </property>

                 </bean>

           

          </beans>

          3、注意

          1)、注意紅色字體部分,就是你要配置的;在引用spring類的地方,注意查看一下你使用的spring包中有的做相應修改。

          2)、注意使用的datasource一定使用NativeJdbcExtractor,就是適用jdbc連接,不要用容器提供連接,不然會報如下錯誤:

          OracleLobCreator needs to work on [oracle.jdbc.OracleConnection], not on [class com.ibm.ws.rsadapter.jdbc.WSJdbcConnection] - specify a corresponding NativeJdbcExtractor

          4、bean中的clob字段使用String類型

          public class LawInfo implements Serializable {

                 ...

                 private String content;

                 ...

                 public String getContent() {

                        return content;

                 }

           

                 public void setContent(String content) {

                        this.content = content;

                 }

           

                 ...   

          }

           

          posted on 2006-03-08 21:03 野草 閱讀(1463) 評論(2)  編輯  收藏 所屬分類: 2shtv

          評論:
          # re: Spring + Hibernate + Oracle9i中使用Clob 2007-05-17 10:31 | 野心
          謝謝你的提示~~
          問題解決了~~


            回復  更多評論
            
          # re: Spring + Hibernate + Oracle9i中使用Clob 2009-08-07 15:24 | slandi
          請問你說的2個注意是什么意思呀,沒太明白
          我按照你說的,除datasource使用的proxool 0.9.1的jar包,其余的都一樣,使用的是oracle9i數(shù)據(jù)庫,運行后可以正確查詢出clob字段的數(shù)據(jù),可是插入時報如下錯誤:
          org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator needs to work on [oracle.jdbc.OracleConnection], not on [oracle.jdbc.internal.OracleConnection$$EnhancerByProxool$$3dcd939d]: specify a corresponding NativeJdbcExtractor; nested exception is java.lang.ClassCastException: oracle.jdbc.internal.OracleConnection$$EnhancerByProxool$$3dcd939d incompatible with oracle.jdbc.driver.OracleConnection
          at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:357)
          不知該如何解決?  回復  更多評論
            
          主站蜘蛛池模板: 琼结县| 霸州市| 浦江县| 阿尔山市| 霍山县| 盖州市| 宜昌市| 宝清县| 崇州市| 察隅县| 工布江达县| 清丰县| 佛冈县| 夏邑县| 周口市| 荆州市| 南安市| 大埔区| 大化| 高阳县| 澄江县| 平江县| 密山市| 安宁市| 嘉祥县| 合川市| 陵川县| 宜阳县| 鲁甸县| 务川| 沁源县| 金乡县| 蓬溪县| 玉溪市| 澄城县| 瓮安县| 新田县| 郴州市| 永泰县| 南陵县| 黄山市|