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

升级Spring Boot与JDK后启动报PropertyReferenceException异常求助

Spring Boot版本升级启动失败问题解决方案

核心根因

报错核心为Spring Data JPA未识别到自定义方法的实现类,误将insertStrOpenDataForRebellion判定为基于StoredProcedureModel实体属性的查询方法,尝试生成查询语句时找不到对应属性导致启动失败。
该问题由两个版本变动共同触发:

  1. Spring Boot 2.0.3升级到2.4.9后,对应的Spring Data JPA版本大幅提升,对自定义Repository的命名规则、扫描规则校验严格度远高于旧版本,旧版本可兼容的不规范配置在新版本会直接报错
  2. JDK8升级到JDK11后,模块化类加载机制改变了默认类路径扫描逻辑,容易出现自定义实现类漏扫描的问题

修复步骤

  • 修正自定义Repository命名规则:Spring Data JPA默认要求自定义实现类名称必须为「接口名+Impl」后缀,若你的接口名为OracleTypeRepository,实现类必须命名为OracleTypeRepositoryImpl,不可修改后缀。
  • 修正@EnableJpaRepositories扫描配置:
    现有配置仅扫描com.client.databaseservice.repositories包,而报错中OracleTypeRepository位于com.client.databaseservice.rptmaster.repository包下,需将该路径加入扫描范围,同时显式指定实现类后缀适配新版本校验,修正后配置如下:
    @EnableJpaRepositories(
        entityManagerFactoryRef = "oracleEntityManager", 
        transactionManagerRef = "oracleTransactionManager", 
        basePackages = {"com.client.databaseservice.repositories", "com.client.databaseservice.rptmaster.repository"},
        implementationPostfix = "Impl"
    )
    
  • 修正实体扫描路径:检查StoredProcedureModel实体类是否在oracleEntityManager配置的扫描包com.client.databaseservice.transaction.models下,若不在需补充对应包路径:
    @Bean(name = "oracleEntityManager")
    public LocalContainerEntityManagerFactoryBean postgresqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(postgresqlDataSource()).properties(hibernateProperties())
                // 补充StoredProcedureModel所在的包路径
                .packages("com.client.databaseservice.transaction.models", "com.client.databaseservice.rptmaster.models")
                .persistenceUnit("oraclePU").build();
    }
    
  • 校验方法签名一致性:确认OracleTypeRepository接口中定义的insertStrOpenDataForRebellion方法,和实现类中的重写方法参数、返回值完全一致,无泛型擦除、参数类型不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:42:02