2016-09-23 2 views
1

jtds 드라이버를 사용하여 SpringBoot + JPA 응용 프로그램의 Windows 인증을 사용하여 UnixBox에서 SQLServer에 연결합니다. 독립 실행 형 응용 프로그램이며 웹 기반 응용 프로그램은 아닙니다. 나는 같은에 연결할 성공적으로 수 있어요하지만 JPARepository를 사용하여 일부 데이터를 저장하려고하면, 나는 다음과 같은 예외가 나타납니다 SqlServer 연결에 jtds를 사용하는 중 예외가 발생했습니다.

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(); 
} 

제안한대로 here; 우리는 똑같은 것을 구현할 수 있습니다. 다른 사람이 내 구현을 JtdsPreparedStatement으로 등록 할 때 런타임시 Spring 컨테이너가 아닌 기본 컨테이너를 선택하도록 등록 할 수 있습니까? 또는 다른 옵션을 사용할 수 있습니까?

: JtdsPreparedStatement에는 기본 범위가있는 생성자가 있습니다. 심지어 확장 할 수 없습니다

답변

0

이 경우 열린 jTDS bug이 있습니다. 즉, 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 가지 옵션이 있습니다 :이 방법을 지원하는 마이크로 소프트 JDBC 드라이버에

  1. 스위치를
  2. jTDS를의 소스 코드를 얻고로 기존의 방법을 전달하여 방법을 자신 (대부분을 구현 새로운 방법)

내 경험에 비추어 볼 때, 곧 공식 버전에 포함되지 마십시오.

관련 문제