2013-10-10 57 views
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.SqlUtils.toSQLException(SqlUtils.java:106) at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65) 上強制轉換爲oracle.sql.CLOB at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:62) at 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) 的組織。 hibernate.type.descriptor.sql.ClobTypeDescriptor $ 1 $ 1.doBind(ClobTypeDescriptor.java:56) at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:91) at org.hibernate.type。 AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:283) 在org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:278) 在org.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:340) 的組織。 hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPe rsister.java:2184) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2559) ... 71 more更多信息:java.lang.ClassCastException:com.sun.proxy。$ Proxy78 can not被轉換爲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多個

回答

0

所以,這是一個奇怪的一個。 c3p0不會代理CLOB。不知何故,你已經獲得的CLOB已經被包裝在一個Java標準的動態代理之後。你需要弄清楚發生了什麼。您的代理CLOB對象來自哪裏?

看起來好像hibernate有時會代理CLOB,請參閱ClobProxy。也許這就是爲什麼你有一個代理而不是你的驅動程序期望的那種CLOB?

相關問題