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

SpringBoot 2.7.0升级至3.3.3时jpaSharedEM_entityManagerFactory注入异常求助

解决Spring Boot 3.3.3迁移中jpaSharedEM_entityManagerFactory解析失败问题

1. 检查EntityManagerFactory配置适配性

  • 核对application.properties/application.yml中的JPA配置,确保适配Spring Boot 3.x:
    • 驱动类替换为Jakarta EE兼容版本,比如MySQL用com.mysql.cj.jdbc.Driver(弃用旧的com.mysql.jdbc.Driver)
    • 数据库URL需包含必要参数,比如MySQL的serverTimezone
    • 方言使用对应版本,比如org.hibernate.dialect.MySQL8Dialect(适配MySQL 8+)
  • 若自定义了EntityManagerFactory Bean,必须使用Jakarta EE包路径(jakarta.persistence.*),示例代码:
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource);
        em.setPackagesToScan("com.yourpackage.entity");
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        Map<String, Object> properties = new HashMap<>();
        properties.put("hibernate.hbm2ddl.auto", "update");
        properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
        em.setJpaPropertyMap(properties);
        return em;
    }
    

2. 修正@EnableJpaRepositories配置

  • 若自定义了EntityManagerFactory,需在@EnableJpaRepositories中指定entityManagerFactoryRef属性,绑定对应的Bean名称:
    @SpringBootApplication
    @EnableJpaRepositories(basePackages = "com.yourpackage.repository", entityManagerFactoryRef = "entityManagerFactory")
    public class StudioApplication {
        public static void main(String[] args) {
            SpringApplication.run(StudioApplication.class, args);
        }
    }
    
  • 确认basePackages覆盖了所有Repository所在的包,避免漏扫。

3. 排查依赖冲突

  • 执行mvn dependency:tree(Maven)或./gradlew dependencies(Gradle),检查是否残留javax.persistence相关旧依赖,需排除所有javax.*的JPA相关依赖,确保全部使用Jakarta EE版本。
  • 确认spring-boot-starter-data-jpa为3.3.3版本,未被其他依赖降级。

4. 规范UserDetailsService的依赖注入

  • 优先使用构造函数注入UserRepository,避免字段注入的潜在问题:
    @Service
    public class CustomUserDetailsService implements UserDetailsService {
        private final UserRepository userRepository;
    
        public CustomUserDetailsService(UserRepository userRepository) {
            this.userRepository = userRepository;
        }
    
        @Override
        public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
            // 业务逻辑实现
        }
    }
    
  • 确保UserRepository接口正确继承JpaRepository或Spring Data JPA的其他Repository接口。

5. 清理缓存并重新构建

  • 执行项目清理构建:Maven用mvn clean install,Gradle用./gradlew clean build
  • 清除IDE缓存(比如IntelliJ IDEA的File -> Invalidate Caches...),避免旧编译文件干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:44:54