0

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

  • $Proxy78 不能转换为 oracle.sql.CLOB

有谁知道如何解决这个问题?

完整的堆栈跟踪如下

原因:java.sql.SQLException:SQLException 由以下故障引发:java.lang.ClassCastException:com.sun.proxy.$Proxy78 无法在 com.mchange.v2.sql 中强制转换为 oracle.sql.CLOB。 com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65) 处 com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:62) 处的 SqlUtils.toSQLException(SqlUtils.java:106) .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 更多

4

1 回答 1

0

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

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

于 2013-10-12T06:03:14.033 回答