0

Hibernate 4 使用 jdbc4,将方法 setBinaryStream(int, InputStream, int) 的签名更改为 setBinaryStream(int, InputStream, long )。C3P0 不支持这种新方法。

所以调用 saveOrUpdate(myObjWithBlob) 结果

java.lang.AbstractMethodError: com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
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.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy75.setBinaryStream(Unknown Source)

那我现在能做什么?

1) 不要使用 c3p0。DHCP、BoneCP 或根本没有连接池。- 不是我真正想要的选择。

2)不知何故让hibernate避免调用这个新方法?有可能吗?

3)切换回休眠3 - 对我来说也不是很好。

4

1 回答 1

8

请升级到 c3p0 0.9.2-pre8(或等待几天为 0.9.2 最终版本)。此问题已在该库的最新版本中得到解决。

更新: c3p0-0.9.2 现已发布。它确实解决了这个问题。

于 2013-02-08T17:58:52.717 回答