2014-12-01 2 views
1

Hibernate 4.3 ожидает использования с драйверами JDBC 4. К сожалению, некоторые поставщики (например, IBM с Informix) еще не предоставляют драйвер JDBC 4, они только совместимы с JDBC 3.Hibernate 4.3 с драйвером Informix JDBC 3

Таким образом, вы получите ошибки в некоторых случаях, например. при вставке данных в BLOB вы получите:

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

Так почему же Hibernate работы, как если бы JDBC 4 драйверов для Informix были уже доступны? Почему команда Hibernate не ожидала этой проблемы?

+1

Microsoft имеет драйвер JDBC 4: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774 –

+0

вы совершенно правы. Я применил этот вопрос таким образом, что он только упоминает Informix. –

ответ

1

Существует обходное решение для упомянутых ошибок в отношении setBinaryStream: вы должны написать свои собственные подклассы диалектов Hibernate, а затем использовать эти диалекты, например. for 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 ...

P.S. это решение касается только проблемы setBinaryStream, другие возможные ошибки из-за старых драйверов JDBC 3 не решаются.

Смежные вопросы