背景
在信息發(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; } ... } |