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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值