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;
相关文章
相关标签/搜索