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

Spring Boot连接GCP Spanner时SpannerRepository的findById返回空

解决Spring Data Spanner findById返回null及代理报错问题

排查步骤及解决方案:

  • 确认目标数据存在
    直接登录GCP Spanner控制台,在FileImportStats表中用传入的fileImportId执行查询,确认数据是否真实存在。返回null最常见的原因就是数据本身不存在。

  • 校验主键映射正确性

    • 检查Spanner表的主键列名FileImportId与实体类的@Column(name = "FileImportId")大小写完全一致,Spanner默认区分大小写,列名不匹配会导致查询无结果。
    • 确认Spanner表主键列的类型为STRING,与实体类的String fileImportId类型匹配,类型不兼容会导致无法匹配数据。
  • 定位代理报错的真实根因
    jdk.proxy2.$Proxy146.findById(unknown Source)只是代理类的堆栈信息,不是真正错误原因,需要查看完整堆栈的Caused by部分:

    • 检查服务账号权限:确保连接Spanner的服务账号拥有roles/spanner.databaseReader权限,无读取权限会导致查询失败返回null。
    • 核对数据库配置:确认application.yml/application.properties中的Spanner实例ID、数据库名称配置正确,示例配置:
      spring.cloud.gcp.spanner.instance-id=your-spanner-instance
      spring.cloud.gcp.spanner.database=your-database-name
      
    • 检查实体类字段映射:除主键外,其他字段的@Column注解列名、类型需与Spanner表完全匹配,比如Spanner的INT64对应实体类的Long而非Integer,字段映射错误会导致无法构造实体返回null。
  • 确认仓库接口继承正确
    确保FileImportStatsRepository继承的是org.springframework.cloud.gcp.data.spanner.repository.SpannerRepository,不要误继承Spring Data JPA或其他类型的Repository接口。

  • 开启日志调试
    添加日志配置查看实际执行的SQL,确认参数和语句是否正确:

    logging.level.org.springframework.cloud.gcp.data.spanner=DEBUG
    logging.level.com.google.cloud.spanner=DEBUG
    

    日志中会打印生成的查询SQL,可直接复制到Spanner控制台执行,验证是否能返回数据。

  • 校验依赖版本兼容性
    确保Spring Boot与Spring Cloud GCP版本兼容,比如Spring Boot 3.x需搭配Spring Cloud GCP 4.x版本,版本不兼容会导致代理类生成异常或方法调用失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:45:29