由于oracle连接采用的是连接池连接方式c3p0,开始在Spring中配置Clob如下:
在sessionFactory中配置
......
然后进行保存操作时,会出现如下错误:
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的错误,不难发现配置肯定是哪里出了问题。
最终修改配置如下:
改为org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor
就可以解决问题了。所以以后注意啦,如果你没有采用连接池配置,可进行原给出的配置。
做一点说明,我使用的Hibernate配置,在映射文件中还得针对clob类型加入:
type="org.springframework.orm.hibernate3.support.ClobStringType"