Spring对Oracle的Clob配置

最近整一个mysql项目转oracle项目,中间遇到问题挺多,其中最为严重就是mysql中的longtext类型转换到oracle成clob类型的问题。
由于oracle连接采用的是连接池连接方式c3p0,开始在Spring中配置Clob如下:
<bean id="nativeJdbcExtractor" lazy-init="true"  class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>

<bean id="oracleLobHandler" lazy-init="true"   class="org.springframework.jdbc.support.lob.OracleLobHandler">
        <property name="nativeJdbcExtractor">
            <ref bean="nativeJdbcExtractor"/>
        </property>
</bean>

在sessionFactory中配置<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
......
<property name="lobHandler" ref="oracleLobHandler"/>
</bean>
然后进行保存操作时,会出现如下错误:
Caused by: java.lang.ClassCastException: com.mchange.v2.c3p0.impl.NewProxyConnection cannot be cast to oracle.jdbc.OracleConnection
at oracle.sql.CLOB.createTemporary(CLOB.java:754)
at oracle.sql.CLOB.createTemporary(CLOB.java:716)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.prepareLob(OracleLobHandler.java:541)
at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:488)
... 67 more

最终找问题时发现在配置文件时是有特殊要求的,我们看错误会发现报的是c3p0的错误,不难发现配置肯定是哪里出了问题。
最终修改配置如下:

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

<bean id="oracleLobHandler" lazy-init="true"   class="org.springframework.jdbc.support.lob.OracleLobHandler">
        <property name="nativeJdbcExtractor">
            <ref bean="nativeJdbcExtractor"/>
        </property>
</bean>
改为org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor
就可以解决问题了。所以以后注意啦,如果你没有采用连接池配置,可进行原给出的配置。

做一点说明,我使用的Hibernate配置,在映射文件中还得针对clob类型加入:
type="org.springframework.orm.hibernate3.support.ClobStringType"

你可能感兴趣的:(spring,oracle,Clob配置)