gpt4 book ai didi

java - 带有 Informix JDBC 3 驱动程序的 Hibernate 4.3

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:45 25 4
gpt4 key购买 nike

Hibernate 4.3 预计与 JDBC 4 驱动程序一起使用。不幸的是,一些供应商(例如 IBM 的 Informix)尚未提供 JDBC 4 驱动程序,它们仅兼容 JDBC 3。

因此,在某些情况下您会收到错误,例如当向 BLOB 插入数据时,您将得到:

java.lang.AbstractMethodError: Method com/informix/jdbc/IfxPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V is abstract

那么为什么 Hibernate 的工作方式就好像 Informix 的 JDBC 4 驱动程序已经可用一样?为什么 Hibernate 团队没有预见到这个问题?

最佳答案

对于上述有关 setBinaryStream 的错误有一个简单的解决方法:您必须编写自己的 Hibernate 方言子类,然后使用这些方言,例如对于 Informix:

package at.rsf4j.core.db.hibernate.dialect;

import org.hibernate.dialect.InformixDialect;

/**
* special dialect that asserts that Hibernate 4 works with a JDBC 3 Informix driver.
* As soon as there is a JDBC 4 driver, this class can be deleted.
*/
public class InformixJdbc3Dialect extends InformixDialect {

/**
* this must return false as long as we use a JDBC 3.0 driver for Informix
*/
@Override
public boolean useInputStreamToInsertBlob() {
return false;
}



}

我的问题是:我不可能是第一个注意到这些问题的人。我错过了什么吗?有更好的方法来解决这些问题吗?否则我希望这段代码成为 Hibernate 的一部分......

附注此解决方案仅解决了 setBinaryStream 问题,未解决由于旧 JDBC 3 驱动程序而可能出现的其他错误。

关于java - 带有 Informix JDBC 3 驱动程序的 Hibernate 4.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27227983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com