ComboPooledDataSource -com.sun.proxy.$Proxy78 不能强制转换为 oracle.sql.CLOB

Posted

技术标签:

【中文标题】ComboPooledDataSource -com.sun.proxy.$Proxy78 不能强制转换为 oracle.sql.CLOB【英文标题】:ComboPooledDataSource -com.sun.proxy.$Proxy78 cannot be cast to oracle.sql.CLOB 【发布时间】:2013-10-10 13:00:41 【问题描述】:

我正在尝试使用 C3P0 连接池 (com.mchange.v2.c3p0.ComboPooledDataSource c3p0-0.9.1.2.jar),但在尝试加载持有 Clob 的对象时收到此错误(Oracle数据库):

$Proxy78 无法转换为 oracle.sql.CLOB

有人知道怎么解决吗?

完整的堆栈跟踪如下

Caused by: java.sql.SQLException: 一个 SQLException 是由 以下失败:java.lang.ClassCastException: com.sun.proxy.$Proxy78 无法转换为 oracle.sql.CLOB 在 com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 在 com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65) 在 com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:62) 在 com.mchange.v2.c3p0.impl.NewPooledConnection.handleThrowable(NewPooledConnection.java:432) 在 com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setClob(NewProxyPreparedStatement.java:535) 在 org.hibernate.type.descriptor.sql.ClobTypeDescriptor$2$1.doBind(ClobTypeDescriptor.java:70) 在 org.hibernate.type.descriptor.sql.ClobTypeDescriptor$1$1.doBind(ClobTypeDescriptor.java:56) 在 org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:91) 在 org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:283) 在 org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:278) 在 org.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:340) 在 org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2184) 在 org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2559) ... 71 更多原因:java.lang.ClassCastException: com.sun.proxy.$Proxy78 无法转换为 oracle.sql.CLOB 在 oracle.jdbc.driver.OraclePreparedStatement.setClob(OraclePreparedStatement.java:6559) 在 oracle.jdbc.driver.OraclePreparedStatementWrapper.setClob(OraclePreparedStatementWrapper.java:158) 在 com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setClob(NewProxyPreparedStatement.java:521) ... 79 更多

【问题讨论】:

【参考方案1】:

所以,这很奇怪。 c3p0 不代理 CLOB。不知何故,您获得的 CLOB 已包装在 Java 标准动态代理后面。你需要弄清楚这是怎么发生的。您的代理 CLOB 对象来自哪里?

看起来好像休眠有时会代理 CLOB,请参阅 ClobProxy。也许这就是为什么你有一个代理而不是你的驱动程序期望的那种 CLOB?

【讨论】:

以上是关于ComboPooledDataSource -com.sun.proxy.$Proxy78 不能强制转换为 oracle.sql.CLOB的主要内容,如果未能解决你的问题,请参考以下文章

用spring 创建ComboPooledDataSource和JdbcTemplate对象

ComboPooledDataSource连接mysql

ComboPooledDataSource -com.sun.proxy.$Proxy78 不能强制转换为 oracle.sql.CLOB

c3p0 ComboPooledDataSource无法识别的问题

Java spring API 上的键 [com.mchange.v2.c3p0.ComboPooledDataSource] 错误没有值

Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement ->