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

Cassandra读取Decimal类型值遇Codec not found错误,求解决方案

解决Cassandra Decimal类型读取报错:Codec not found for requested operation [decimal <-> java.lang.Double]

报错信息

Codec not found for requested operation [decimal <-> java.lang.Double]

问题原因

你在Cassandra中存储的是Decimal类型,但代码里试图用Long类型接收,二者类型不匹配;同时你错误注册了InstantCodec.decimal()——这个是处理时间类型的编解码器,和Decimal类型完全无关,两个问题叠加导致了编解码器找不到的报错。

解决方案

  • 匹配对应类型:Cassandra的Decimal类型对应Java的BigDecimal,而非Long或Double,读取时要保证类型一致
  • 移除错误的编解码器注册:Cassandra Java驱动自带BigDecimalCodec,默认就能处理Decimal类型,不需要额外注册错误的InstantCodec
  • 修改代码类型参数:把getMap方法中的Long.class替换为BigDecimal.class

修改后的代码

cluster = Cluster.builder().addContactPoint("dev").withPort(9042).build();
// 移除错误的InstantCodec注册,无需额外操作即可处理Decimal类型
Select select = QueryBuilder.select().from("app");
session = cluster.connect(keyspace);

ResultSet resultSet = session.execute(select);

// 将Map的value类型从Long改为BigDecimal
Map<String,Map<String,BigDecimal>> map = new HashMap<>();

resultSet.forEach(x -> map.put(x.getString("signal_name"), x.getMap("config", String.class, BigDecimal.class)));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:05:13