我正在尝试使用C3P0连接池(com.mchange.v2.c3p0.ComboPooledDataSource c3p0-0.9.1.2.jar),但是在尝试加载持有Clob的对象时我收到此错误(Oracle数据库):
有谁知道如何解决这个问题?
完整堆栈跟踪如下
引起: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) at 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 at oracle.jdbc.driver.OraclePreparedStatement.setClob(OraclePreparedStatement.java:6559) at oracle.jdbc.driver.OraclePreparedStatementWrapper.setClob(OraclePreparedStatementWrapper.java:158) 在com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setClob(NewProxyPreparedStatement.java:521) ... 79更多
答案 0 :(得分:0)
所以,这是一个奇怪的。 c3p0不代理CLOB。不知何故,你得到的CLOB已经被Java标准动态代理包围了。你需要弄清楚这是怎么回事。您的代理CLOB对象来自哪里?
看起来hibernate有时会代理CLOB,请参阅ClobProxy。也许这就是为什么你有一个代理而不是你的驱动程序期望的那种CLOB?