SSH對Clob字段類型的支持

SSH對Clob字段類型的支持

環境:html

一、Oracle 9i 9.2.0.8.0java

二、jdbc:ojdbc5.jarspring

三、Spring 2數據庫

四、Hibernate 3session

 

系統中有個信息管理模塊,其中的信息內容使用了FCKeditor進行編輯,內容可能會很長,所以決定將該字段類型由varchar2改成clob。app

 

在網上查資料,聽說Oracle 10g和1.4及以上版本的JDBC已經支持使用String直接映射Clob,配置以下:fetch

  • Hibernate的JDBC配置

 

Code
<property name="hibernate.connection.SetBigStringTryClob">true</property>

 

  • Hibernate映射文件

 

Code
<property name="clobContent" type="text" column="V_CONTENT"></property>

 

  • 實體類

 

Code
private String clobContent; 

 

詳見:Hibernate 中Clob字段的使用spa

 

惋惜咱們的環境並不支持這種簡單的配置,經多番查找資料和試驗,我採用了Spring的支持方式,配置以下:.net

  • Spring 配置文件

 

Code
<!-- 對數據庫Blob字段和Clob字段的支持 -->
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" lazy-init="true">
</bean>   
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">   
    
<property name="nativeJdbcExtractor">   
        
<ref local="nativeJdbcExtractor" />   
    
</property>   
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
    
<property name="dataSource" ref="app_ds"/> 

    
<!-- 對數據庫Blob字段和Clob字段的支持 -->
    
<property name="lobHandler">   
        
<ref local="lobHandler"/>   
    
</property>

 

  • Hibernate映射文件

 

Code
<property name="clobContent" type="org.springframework.orm.hibernate3.support.ClobStringType" column="V_CONTENT"></property>

 

  • 實體類

 

Code
private String clobContent;

 

 PS:若是是用的註解來映射的話hibernate

  

/**    
     * nr:(內容)      
     * @since Ver 1.1    
     */ 
    @Lob 
    @Basic(fetch = FetchType.LAZY) 
    @Column(name="nr", columnDefinition="CLOB", nullable=true)
    @Comment("內容")
    private String nr;

這樣配置後,便可正常運行,不需改動代碼。

 

附:

一、JDBC版本很重要。最初咱們的lib下扔了兩個驅動classes12.jar和ojdbc5.jar,一直是classes12.jar在起做用,結果調試時讀取數據沒有問題,但寫入數據時報「沒法從套接字讀取更多的數據」的錯誤,刪除這個包後運行正常。

點擊查看classes12.jar和ojdbc的不一樣

二、varchar2轉clob的SQL

 

Code
ALTER TABLE tb_base_notify
ADD (v_content1 CLOB); 

UPDATE tb_base_notify
SET v_content1=v_content; 

ALTER TABLE tb_base_notify DROP COLUMN v_content; 

ALTER TABLE tb_base_notify
RENAME 
COLUMN v_content1 TO v_content;
相關文章
相關標籤/搜索