网上有很多关于这个问题的解决方法.不过经过我近一个星期的实验.... 都行不通. 写这篇.只是为了给和我一样遇到这些问题的人一些帮助.

所需步骤:

1.   需要在applicationContext.xml文件中进行对大数据处理方法的配置
2.   实体类对应字段定义为String
3.   映射文件使用org.hibernate.type.StringClobType对相应字段进行配置

 

先看实体类映射文件

<hibernate-mapping>

    <class name="com.njdt_oa.common.domain.GXOA_NJDT_WLFYNR" table="GXOA_NJDT_WLFYNR">

        <id name="rowId" type="java.lang.String">

            <column name="ROW_ID" length="40" />

            <generator class="uuid.hex" />

        </id> 

        <property name="ftnr_blob" type="org.hibernate.type.StringClobType">

            <column name="FTNR_BLOB" />

        </property>

        <property name="htnr_blob" type="org.hibernate.type.StringClobType">

            <column name="HTNR_BLOB" />

        </property>

    </class>

</hibernate-mapping>

 

 

实体类

package com.njdt_oa.common.domain;

 

import java.util.Date;

 

public class GXOA_NJDT_WLFYNR implements java.io.Serializable{

   

    public GXOA_NJDT_WLFYNR(){}

   

    private String rowId;

    private String ftnr_blob;

    private String htnr_blob;   

   

    public String getRowId() {

       return rowId;

    }

    public void setRowId(String rowId) {

       this.rowId = rowId;

    }

    public String getTableId() {

       return tableId;

    }

    public void setFtnr_blob(String ftnr_blob) {

       this.ftnr_blob = ftnr_blob;

    }

    public String getHtnr_blob() {

       return htnr_blob;

    }

    public void setHtnr_blob(String htnr_blob) {

       this.htnr_blob = htnr_blob;

    }  

}

 

applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

 

<beans>   

    <!-- oracle 9i处理方法

       <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" lazy-init="true" />

       <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">

            设置本地jdbc对象抽取器

           <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" />

       </bean>

    -->

   

    <!-- oracle 10g -->

    <bean id="lobHandler" lazy-init="true"  class="org.springframework.jdbc.support.lob.DefaultLobHandler" />

   

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

       <property name="jndiName">

           <value>java:comp/env/jdbc/TestDB</value>

       </property>

    </bean>

       

    <bean id="sessionFactory"

    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

       <!-- oracle 10g对大数据处理的实现类注入到SessionFactory中 -->

       <property name="lobHandler" ref="lobHandler"/>

       <property name="dataSource">

           <ref bean="dataSource" />

       </property>

</bean>

        其他配置.....

    </beans>

 

注意:

网上的很多方法.都是在映射文件中用org.springframework.orm.hibernate3.support.ClobStringType对数据库的Clob类型进行映射.可是在显示的时候始终是乱码..各种编码、各种方法都试过,乱码就像牛皮藓一样顽固.后来在网上看到一篇关于ibatis+spring对Lob数据的处理.上面说也是乱码问题.后来没用spring的处理类.改成用ibatis自己的.就好了. 于是也照葫芦画瓢.试了一下hibernate的处理类(org.hibernate.type.StringClobType).果然好了.感谢那篇文章.