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 - 对我来说也不是很好。