Исключение при использовании jtds для подключения SqlServer

Я использую драйвер jtds для подключения к SQLServer из UnixBox с использованием проверки подлинности Windows из приложения SpringBoot + JPA. Это отдельное приложение, а не веб-приложение. Я успешно могу подключиться к тому же, но когда я пытаюсь сохранить некоторые данные с помощью JPARepository, я получаю следующее исключение:

java.lang.AbstractMethodError: null
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setCharacterStream(JtdsPreparedStatement.java:1274) ~[jtds-1.3.1.jar:1.3.1]

Я проверил соответствующий исходный код в JtdsPreparedStatement и обнаружил, что для этого метода нет реализации:

@Override
public void setCharacterStream(int parameterIndex, Reader reader,
        long length) throws SQLException {
    // TODO Auto-generated method stub
    throw new AbstractMethodError();
}

Как предложено здесь; мы можем реализовать то же самое, и это должно работать. Может кто-нибудь объяснить, как я могу зарегистрировать свою реализацию JtdsPreparedStatement для выбора во время выполнения контейнером Spring, а не по умолчанию? или если есть какой-либо другой доступный вариант?

Изменить: JtdsPreparedStatement имеет конструктор с областью действия по умолчанию; даже продлить нельзя


person gaurs    schedule 23.09.2016    source источник


Ответы (1)


Для этого существует открытая ошибка jTDS. Короче говоря, стандарты JDBC определяют два разных метода установки символьного потока:

Сигнатура старого метода:

public void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException

Сигнатура нового метода:

public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException

С той разницей, что последний параметр был изменен с long на int.

jTDS не реализовал новый метод, используемый Hibernate, поэтому вы получаете ошибку AbstractMethodError.

Здесь у вас есть 2 варианта:

  1. Переключитесь на драйвер Microsoft JDBC, который поддерживает этот метод.
  2. Получите исходный код jTDS и реализуйте метод самостоятельно (скорее всего, перенаправив старый метод на новый метод)

По моему опыту, не рассчитывайте на официальный релиз в ближайшее время.

person zuckermanori    schedule 22.12.2016