我使用jtds驱动程序使用SpringBoot + JPA应用程序中的Windows身份验证从UnixBox连接到SQLServer。它是一个独立的应用程序,而不是一个基于Web的应用程序。我成功连接到同一个但是当我尝试使用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();
}
按照建议here;我们可以实现相同的,它应该工作。有人可以解释我如何注册我的 JtdsPreparedStatement
的实现,以便在运行时由Spring容器而不是默认容器选择?或者是否有其他选择?
编辑:JtdsPreparedStatement
有一个默认范围的构造函数;甚至无法扩展它
答案 0 :(得分:1)
这是一个开放的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个选项:
根据我的经验,不会很快指望官方发布。