【问题标题】:Exception Caused by: java.lang.AbstractMethodError after upgrading spring-boot, spring and hibernate异常原因:升级spring-boot,spring和hibernate后java.lang.AbstractMethodError
【发布时间】:2021-11-25 10:21:58
【问题描述】:

我将 spring 版本从 4 提高到 5,将 hibernate 从 4 提高到 5。spring-boot 也因为需要更新的弹簧而受到冲击。

    <library.spring.version>5.1.6.RELEASE</library.spring.version>
        <library.spring-boot.version>2.1.4.RELEASE</library.spring-boot.version>
<library.hibernate.version>5.1.4.Final</library.hibernate.version>
        <library.hibernate-validator.version>5.4.3.Final</library.hibernate-validator.version>
        <library.jadira-usertype.version>3.1.0.CR1</library.jadira-usertype.version>
        <library.javax-validation.version>1.1.0.Final</library.javax-validation.version>

我想我有不兼容的版本。你能告诉我哪些版本是错误的,我应该使用哪个版本?

我明白了:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
    at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:127)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)
    ... 25 more
Caused by: java.lang.AbstractMethodError
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:277)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465)

M.Deinum 回答后我在 pom.xml 中使用的库。删除了 spring 版本及其所有依赖项。

<parent>
    ....
    ...
</parent>
....

<properties>
    <scm_path>...</scm_path>
    <findbugs.threshold>Default</findbugs.threshold>
    <findbugs.failOnError>false</findbugs.failOnError>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <library.asm.version>5.0.3</library.asm.version>
    <library.camel.version>2.16.1</library.camel.version>
    <library.commons-lang3.version>3.4</library.commons-lang3.version>
    <library.cooper.version>0.7.1</library.cooper.version>
    <library.findbugs.version>1.0.0</library.findbugs.version>
    <library.guava.version>21.0</library.guava.version>
    <library.commons.version>4.0</library.commons.version>
    <library.h2.version>1.4.193</library.h2.version>
    <library.javassist.version>3.18.1-GA</library.javassist.version>
    <library.jadira-usertype.version>3.1.0.CR1</library.jadira-usertype.version>
    <library.javax-validation.version>1.1.0.Final</library.javax-validation.version>
    <library.jboss-xnio.version>3.6.2.Final</library.jboss-xnio.version>
    <library.jboss-ejb-api_3.2_spec.version>1.0.0.Final</library.jboss-ejb-api_3.2_spec.version>
    <library.jboss-transaction-api_1.2_spec.version>1.0.1.Final</library.jboss-transaction-api_1.2_spec.version>
    <library.jboss-remote-naming.version>2.0.4.Final</library.jboss-remote-naming.version>
    <library.jboss-ejb-client.version>4.0.11.Final</library.jboss-ejb-client.version>
    <library.jboss-logging.version>3.3.1.Final</library.jboss-logging.version>
    <library.jersey.version>1.19.1</library.jersey.version>
    <library.jolokia.version>1.3.3</library.jolokia.version>
    <library.junit.version>4.12</library.junit.version>
    <library.JUnitParams.version>1.0.6</library.JUnitParams.version>
    <library.log4j.version>1.2.17</library.log4j.version>
    <library.mockito-all.version>1.10.19</library.mockito-all.version>
    <library.saxon-he.version>9.5.1-5</library.saxon-he.version>
    <library.servlet-api.version>3.1.0</library.servlet-api.version>
    <library.spring-boot.version>2.1.4.RELEASE</library.spring-boot.version>
    <library.spring-retry.version>1.2.0.RELEASE</library.spring-retry.version>

    <library.itext.version>2.1.7</library.itext.version>
    <library.commons-net.version>3.3</library.commons-net.version>
    
    <library.netty.version>4.0.37.Final</library.netty.version>
    <library.logback-classic.version>1.1.7</library.logback-classic.version>
    <library.ojdbc.version>12.1.0.2</library.ojdbc.version>
    <library.posgresql.versionn>42.2.18</library.posgresql.versionn>
    <library.tomcat-embed.version>8.5.24</library.tomcat-embed.version>

    <library.jgroups.version>3.6.16.Final</library.jgroups.version>
    <library.slf4j.version>1.7.5</library.slf4j.version>
    <library.wildfly-common.version>1.4.0.Final</library.wildfly-common.version>
    <library.woodstox.version>4.2.1</library.woodstox.version>
    <wmq.version>9.2.0.2</wmq.version>
    <plugin.liquibase-maven-plugin.version>3.5.3</plugin.liquibase-maven-plugin.version>
    <plugins.findbugs.version>3.0.4</plugins.findbugs.version>
    <duplicate-check.phase>verify</duplicate-check.phase>
</properties>


<modules>
    ....
</modules>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${library.spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
            <version>${library.spring-retry.version}</version>
        </dependency>

        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-codec-http</artifactId>
            <version>${library.netty.version}</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-transport-native-epoll</artifactId>
            <version>${library.netty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>${library.mockito-all.version}</version>
        </dependency>
        <dependency>
            <groupId>net.sf.saxon</groupId>
            <artifactId>Saxon-HE</artifactId>
            <version>${library.saxon-he.version}</version>
        </dependency>
    
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${library.logback-classic.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${library.commons-lang3.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${library.servlet-api.version}</version>
        </dependency>
        <dependency>
            <groupId>findbugs</groupId>
            <artifactId>findbugs</artifactId>
            <version>${library.findbugs.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jadira.usertype</groupId>
            <artifactId>usertype.core</artifactId>
            <version>${library.jadira-usertype.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss</groupId>
            <artifactId>jboss-ejb-client</artifactId>
            <version>${library.jboss-ejb-client.version}</version>
        </dependency>
        <dependency>
            <groupId>org.wildfly.common</groupId>
            <artifactId>wildfly-common</artifactId>
            <version>${library.wildfly-common.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>${library.jboss-logging.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss</groupId>
            <artifactId>jboss-remote-naming</artifactId>
            <version>${library.jboss-remote-naming.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.spec.javax.ejb</groupId>
            <artifactId>jboss-ejb-api_3.2_spec</artifactId>
            <version>${library.jboss-ejb-api_3.2_spec.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.spec.javax.transaction</groupId>
            <artifactId>jboss-transaction-api_1.2_spec</artifactId>
            <version>${library.jboss-transaction-api_1.2_spec.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.xnio</groupId>
            <artifactId>xnio-api</artifactId>
            <version>${library.jboss-xnio.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.xnio</groupId>
            <artifactId>xnio-nio</artifactId>
            <version>${library.jboss-xnio.version}</version>
        </dependency>
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>${library.itext.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>${library.commons-net.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-csv</artifactId>
            <version>${library.commons-csv.version}</version>
        </dependency>
        <dependency>
            <groupId>pl.pragmatists</groupId>
            <artifactId>JUnitParams</artifactId>
            <version>${library.JUnitParams.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.xmlunit</groupId>
            <artifactId>xmlunit-core</artifactId>
            <version>${library.xmlunit-core.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jgroups</groupId>
            <artifactId>jgroups</artifactId>
            <version>${library.jgroups.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${library.slf4j.version}</version>
        </dependency>

        
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>com.ibm.mq</groupId>
            <artifactId>com.ibm.mq.allclient</artifactId>
            <version>${wmq.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${library.guava.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>${library.commons.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-parent</artifactId>
            <version>${library.camel.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>${library.spring-boot.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>${library.spring-boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>${library.spring-boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>${library.tomcat-embed.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-el</artifactId>
            <version>${library.tomcat-embed.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-websocket</artifactId>
            <version>${library.tomcat-embed.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
            <version>${library.tomcat-embed.version}</version>
        </dependency>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>${library.asm.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
            <version>${library.woodstox.version}</version>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>${library.javassist.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <version>${library.spring-boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>${library.spring-boot.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

....

【问题讨论】:

  • 你正试图智取 Spring Boots 初学者,不要。抛弃 spring 版本和 hibernate 版本,使用 spring boot 管理的版本。验证也是如此。
  • @M.Deinum 但我不能使用 spring-boot-starter-parent,因为我有另一个内部父级。我只有 spring-boot-starter 作为依赖项。所以你是说我应该完全删除 spring/hibernate deps?
  • 您可以将父级作为依赖项管理部分的一部分导入,这样它至少会管理版本并且您可以获得兼容的版本。只需在 dependencyManagement 部分中使用 spring-boot-starter-dependencies 并使用 import 作为范围。这样你至少可以获得正确的依赖版本。

标签: spring spring-boot hibernate


【解决方案1】:

修复你的 pom.xml 并让 Spring Boot 管理依赖项。

  1. spring-boot-starter-dependencies 添加为bom
  2. 添加所需的spring-boot-starter-* 依赖项
<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${library.spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

根据您的属性添加以下内容

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
</dependencies>

您可能也可以完善您的其他依赖项,这样您也可以获得正确的 Spring 版本。所以你也可以删除那些version 标签。

【讨论】:

  • 我得到了同样的错误。更新了我拥有的库的问题。你能检查一下吗?
  • 我不得不将 jadira.usertype 适当地从 3.0.0 提高到 7.0.0。
猜你喜欢
  • 1970-01-01
  • 2018-08-04
  • 2015-11-15
  • 2018-09-30
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2020-09-15
相关资源
最近更新 更多