【问题标题】:Hibernate 4 calls setBinaryStream that is not supported in c3p0Hibernate 4 调用 c3p0 中不支持的 setBinaryStream
【发布时间】:2013-02-08 11:19:10
【问题描述】:

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) 不知何故让休眠避免调用这个新方法?有可能吗?

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

【问题讨论】:

  • 我不相信#2 是可能的。至于 #1,如果您使用其中任何一个 Web 服务器,Tomcat 7 和 JBoss 7 中也有本机连接池。
  • 在某个时间点,Hibernate 4 似乎应该支持 JDBC 3,但我无法弄清楚如何做到这一点:community.jboss.org/wiki/JDBC4Support
  • 此外,如果您避免使用 blob,您似乎可以避免使用此方法。不确定这是否是一个选项。
  • 最后但同样重要的是,您可以按照此处的建议自行编译 C3P0:hibernate.onjira.com/browse/HHH-7801
  • hm...Hibernate 的默认连接池破坏了 saveOrUpdate 之类的基本功能,这似乎很奇怪...希望以后能修复它。

标签: java hibernate c3p0


【解决方案1】:

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

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

【讨论】:

  • 我遇到了同样的问题,升级到 0.9.2 节省了我的时间;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 2017-09-03
  • 2013-10-14
  • 1970-01-01
  • 2013-11-02
  • 2023-04-02
相关资源
最近更新 更多