You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应用升级时entityManagerFactory Bean创建失败问题求助

问题:创建entityManagerFactory Bean失败

升级应用时遇到创建名为entityManagerFactory的Bean失败问题,此前已解决「无指定名称持久化单元」的问题,但当前仍无法创建该Bean。

技术环境

  • JDK 1.8
  • MySQL 8.0.31
  • Spring 5.3.27
  • Aspectj 1.8.10
  • log4j-api(core, web) 2.17.1

根错误日志

java.lang.NoSuchMethodError: org.hibernate.annotations.common.reflection.java.JavaReflectionManager.injectClassLoaderDelegate(Lorg/hibernate/annotations/common/reflection/ClassLoaderDelegate;)V

相关依赖配置

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.3.7.Final</version>
</dependency>

<dependency>
        <groupId>org.hibernate.common</groupId>
        <artifactId>hibernate-commons-annotations</artifactId>
        <version>5.1.1.Final</version>
</dependency>

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-search</artifactId>
        <version>3.4.1.Final</version>
</dependency>

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.3.7.Final</version>
        <exclusions>
            <exclusion>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
            </exclusion>
            <exclusion>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
            </exclusion>
        </exclusions>
</dependency>

<dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.0.Final</version>
</dependency>

applicationcontext.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:jpa="http://www.springframework.org/schema/data/jpa"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">

    <context:spring-configured />
    
    <context:property-placeholder location="classpath:META-INF/demoweb-backend.properties" />
    
    
    <util:properties id="demoProperties" location="file:///${catalina.home}/conf/demo.properties"/>
    
    <bean id="entityManagerFactory"
        class="com.demoweb.backend.util.demoLocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="demowebDataSource" />
        <property name="persistenceUnitName" value="demoweb" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="generateDdl" value="${demoweb.database.generateddl}" />
                <property name="databasePlatform" value="${demoweb.database.platform}" />
                <property name="showSql" value="false" />
            </bean>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
      
    <bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

    <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"  proxy-target-class="true"/>
    <jpa:repositories base-package="com.demoweb.backend.repository" />
    
</beans>

排查方向

  1. 修复Hibernate核心依赖版本匹配:Hibernate 5.3.x对应的hibernate-commons-annotations正确版本是5.0.4.Final,当前使用的5.1.1.Final版本过高,存在方法不兼容问题,直接降级到匹配版本。
  2. 处理Hibernate Search版本冲突:hibernate-search 3.4.1.Final仅支持Hibernate 3.x,与当前Hibernate 5.3.x完全不兼容,要么升级到Hibernate Search 5.10.x系列(适配Hibernate 5.3),要么确认未使用该依赖后直接移除。
  3. 更新JPA API版本:当前hibernate-jpa-2.0-api对应JPA 2.0,而Hibernate 5.3.x支持JPA 2.1,替换为javax.persistence:javax.persistence-api:2.1,或者删除该显式依赖,使用Hibernate核心依赖传递的JPA API。
  4. 排查依赖树中的冲突:用mvn dependency:tree(Maven)或gradle dependencies(Gradle)命令分析依赖,检查是否有其他依赖传递引入了不同版本的hibernate-commons-annotations,找到后排除冲突版本。
  5. 验证自定义EntityManagerFactoryBean:临时将demoLocalContainerEntityManagerFactoryBean替换为Spring原生的LocalContainerEntityManagerFactoryBean,如果能正常创建Bean,说明自定义类存在逻辑问题,需要排查其重写的初始化方法。

内容的提问来源于stack exchange,提问作者rob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 15:17:52