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

我应该如何解决这个问题?也许放弃甲骨文?

感谢您的所有提示。

【问题讨论】:

试试 com.oracle.ojdbcojdbc819.3.0.0版本> 依赖> @SimonMartinelli 是的,我之前尝试过从 19c(19.3.0.0) 下载的 ojdbc 驱动程序,但还是一样。我应该从 .m2 目录中删除其他 ojdbc 驱动程序吗? 该错误表明您的类路径中有 ojdbc14(或者如果存在,则可能是 ojdbc5)。 @MarkRotteveel 是的,你是对的。我在%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) 的实现

springboot+hibernate+JPA环境搭建

SpringBoot JPA-Hibernate

SpringMVC 项目中 创建SpringBoot,使用Hibernate和JPA

SpringMVC 项目中 创建SpringBoot,使用Hibernate和JPA