Spring+Hibernate+Oracle中的Clob操作配置

bean对象配置:

<!-- 此处用于指定当前JDBC的实现,详见下面注解① -->
     <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor" />
     <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
      <property name="nativeJdbcExtractor">
       <ref bean="nativeJdbcExtractor" />
      </property>
     </bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>    
        ...
        <property name="hibernateProperties">
            <value>
            hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
            hibernate.show_sql=false
            </value>
        </property>
        <property name="lobHandler">
           <ref bean="oracleLobHandler" />
          </property>
    </bean>

 hibernate.hbm.xml配置:

<property name="totalInfo" column="total_info" type="org.springframework.orm.hibernate3.support.ClobStringType" not-null="false"/>

 POJO属性设置:

private String totalInfo;

 ---------------------------------------------------------------------------------------------------------------------------

详解①:

  oracle使用私有的API产生oracle.sql.BLOB和oracle.sql.CLOB实例,oracle只接受其自己API产生的实例,并且在PreparedStatement中不支持大的数据流。

此实现类需要一个原生的可以被转换成oracle.jdbc.OracleConnection的链接,所以在使用连接池的时候,就需要一个原生JDBC的转换器。

Spring内置提供的NativeJdbcExtractor转换器有:位于org\springframework\jdbc\support\nativejdbc下
C3P0NativeJdbcExtractor
CommonsDbcpNativeJdbcExtractor
JBossNativeJdbcExtractor
NativeJdbcExtractor
NativeJdbcExtractorAdapter
SimpleNativeJdbcExtractor
WebLogicNativeJdbcExtractor
WebSphereNativeJdbcExtractor
XAPoolNativeJdbcExtractor

此处原生JDBC的转换器仅是真的Oracle进行设置,其他数据库可以直接使用SimpleNativeJdbcExtractor

 若未正确设置,会发生com.mchange.v2.c3p0.impl.NewProxyConnection cannot be cast to oracle.jdbc.OracleConnection异常。

posted @ 2014-01-13 18:36  于辰  阅读(1619)  评论(0编辑  收藏  举报