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

使用Java驱动在YugabyteDB执行findAll查询报数组越界异常

问题根因

该异常是YugabyteDB 4.6.0-yb-6及更早版本定制Java驱动的已知缺陷:当执行不带任何绑定参数的全表查询时(比如Spring Data JPA自动生成的findAll对应SELECT * FROM my_list.attribute语句,无查询参数),分区感知负载均衡策略PartitionAwarePolicy未对空的EmptyColumnDefinitions做长度校验,直接访问下标为0的元素,触发数组越界。

解决方案

方案1(推荐,无需修改业务代码)

直接升级Java驱动版本到4.6.0-yb-9及以上的Yugabyte官方兼容版本,该版本已修复该空定义访问的边界问题,升级后即可正常执行findAll查询。

方案2(临时规避,无法升级驱动时使用)

两种可选规避逻辑二选一即可:

  • 自定义带参数的全表查询:在Repository层新增带分区键过滤的查询方法,示例如下:
    @Query("SELECT * FROM my_list.attribute WHERE id > :minId")
    List<MyClass> findAllCustom(@Param("minId") UUID minId);
    
    调用时传入UUID最小值new UUID(0L, 0L)即可实现全表扫描,携带绑定参数后不会触发空定义访问逻辑。
  • 临时替换负载均衡策略:在项目配置文件中修改Cassandra驱动的负载均衡策略为轮询,避开分区感知策略的异常分支,配置示例:
    spring.data.cassandra.load-balancing-policy.class=com.datastax.oss.driver.internal.core.loadbalancing.RoundRobinPolicy
    

额外建议

YugabyteDB 2.9.0属于开发预览版本,未经过生产级稳定性验证,如果是生产环境使用,建议同步升级到2.18.x、2.20.x等长期支持稳定版本,避免其他已知兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:36:02