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)切换回 hibernate 3 - 对我来说也不是很好。
最佳答案
请升级到 c3p0 0.9.2-pre8(或等待几天以获得 0.9.2 Final)。此问题已在该库的最新版本中得到解决。
更新:c3p0-0.9.2 现已发布。它确实解决了这个问题。
关于java - Hibernate 4 调用 c3p0 中不支持的 setBinaryStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14771399/