Springboot+JPA(Hibernate)+Oracle AbstractMethodError 未定义或继承 isValid(int) 的实现
Posted
技术标签:
【中文标题】Springboot+JPA(Hibernate)+Oracle AbstractMethodError 未定义或继承 isValid(int) 的实现【英文标题】:Springboot+JPA(Hibernate)+Oracle AbstractMethodError not define or inherit an implementation of isValid(int) 【发布时间】:2020-04-02 13:00:30 【问题描述】: JavaJDK 1.13 Springboot 2.2.6 Spring 数据 JPA Oracle 10g我是使用Spring boot的初学者,当我尝试运行demo程序时,它报告异常如下:Caused by: java.lang.AbstractMethodError: Receiver class oracle.jdbc.driver.T4CConnection does not define or inherit an implementation of the resolved method 'abstract boolean isValid(int)' of interface java.sql.Connection.
我在网上尝试了很多解决方案(比如将驱动程序升级到 ojdbc7 或更高版本,而我一直在 一开始就用ojdbc8,甚至尝试从Oracle 19c的网站下载ojdbc8和ojdbc10,但没有人成功。
根据@JensSchauder 的建议,我查看了oracle.jdbc.driver.T4CConnection
类,发现确实没有这种方法称为boolean isValid(int)
,而是boolean isValidLight(int)
。
这里是截图:ScreenShoot Here, boolean isValidLight(int var1)
这里列出我尝试过的 ojdbcs:
ojdbc8:12.2.0.1 ojdbc7:12.1.0.2 ojdbc8:19.3.0.0(使用中) ojdbc10:19.3.0.0我应该如何解决这个问题?也许放弃甲骨文?
感谢您的所有提示。
【问题讨论】:
试试%JavaHome%\lib
下找到了它们(ojdbc14)。它们似乎来自oracle10g。我会尝试重命名它们,看看它是否会引起任何问题。非常感谢。
【参考方案1】:
这里确实有些可疑。 Hikari 正在寻找的方法是在 Java 1.6 中引入的,所以它肯定应该在 ojdbc8
那里。
我会尝试以下方法以更好地了解发生了什么。
-
检查依赖项是否确实正确下载。
在IDE中找到
Connection
类,检查它是否有isValid
方法。
我强烈怀疑它有。
在 Hikari 引发异常的行中添加一个断点并检查它正在检查的对象类型。
这可能已经提供了足够的提示来调试它,如果没有,请使用您找到的信息更新您的问题。
【讨论】:
我以为我找到了问题所在。我找到了班级oracle.jdbc.driver.T4CConnection
,发现它确实没有boolean isValid(int)
,而是boolean isValidLight(int)
。我应该如何解决这个问题?
您是否也在该视图中看到了继承的方法?那么T4Connection
没有实现Connection
?还是它实现了一个真正旧版本的Connection
而没有isValid
?它也来自它应该来自的jar文件吗?
问题已解决。这是由于我的类路径下有 ojdbc14.jar 而我忘了检查它。但无论如何,非常感谢您的回答,很抱歉占用您的时间。以上是关于Springboot+JPA(Hibernate)+Oracle AbstractMethodError 未定义或继承 isValid(int) 的实现的主要内容,如果未能解决你的问题,请参考以下文章
springboot官方为何不支持mybatis,而选择底层为hibernate的JPA?
Springboot+JPA(Hibernate)+Oracle AbstractMethodError 未定义或继承 isValid(int) 的实现