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

如何用@Query注解访问Cassandra主键类字段?报错解决

问题解决:Spring Data Cassandra中@Query访问主键类字段报错

错误原因分析

你遇到的"Could not find field for property during fallback access!"报错,主要由以下几个问题导致:

  1. CQL查询语法错误:原查询中使用key.EMP_ID是错误的,CQL直接操作Cassandra表的列名,而非实体类的嵌套属性路径;同时语句末尾缺少闭合引号和括号,引发解析失败。
  2. 主键类ordinal重复:三个主键列的ordinal都设为0,导致Cassandra无法正确识别主键的逻辑顺序,破坏了主键结构的映射关系。
  3. 返回类型不匹配:仅查询EMP_ID字段,但返回Mono<KeyValuePair>,若KeyValuePair未正确映射该字段,会导致结果绑定失败。

修正步骤

1. 修正主键类的ordinal值

主键列的ordinal需按顺序设置,分区键和聚类键不能重复:

@PrimaryKeyClass
public class CassandraPrimaryKeyclass implements Serializable  {
    @PrimaryKeyColumn(name = "KEY_NAME", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    public String serviceKeyName;

    @PrimaryKeyColumn(name = "KEY_VALUE", ordinal = 1, type = PrimaryKeyType.PARTITIONED)
    public String serviceKeyValue;

    @PrimaryKeyColumn(name ="EMP_ID",ordinal = 2, type = PrimaryKeyType.CLUSTERED)
    public String empID;    
}

2. 修正Repository的@Query语句

直接使用Cassandra表的列名,同时修复语法错误,并匹配正确的返回类型:

  • 如果仅需要返回EMP_ID的值,调整返回类型为Mono<String>:
@Query("select EMP_ID from table1 WHERE KEY_NAME=?0 AND KEY_VALUE=?1")
public Mono<String> parallelMultiReadKeyValue(String serviceKeyName, String serviceKeyValue);
  • 如果必须返回KeyValuePair,需确保该类正确映射查询字段:
// 自定义KeyValuePair类,添加字段映射
@Data
public class KeyValuePair {
    @Column("EMP_ID")
    private String empId;
}

// Repository层代码
@Query("select EMP_ID from table1 WHERE KEY_NAME=?0 AND KEY_VALUE=?1")
public Mono<KeyValuePair> parallelMultiReadKeyValue(String serviceKeyName, String serviceKeyValue);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:06:10