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

Cassandra Java驱动4.14:RKey主键类在RDAO中的定义问题

解决Cassandra复合主键独立类的映射问题

针对你用DataStax Java Driver 4.14版本遇到的主键类映射错误,需要做以下关键修正,同时补充必要依赖:

1. 补充实体映射所需依赖

你当前只引入了core模块,实体映射功能需要额外添加mapper相关依赖,在pom.xml中加入:

<dependency>
    <groupId>com.datastax.oss</groupId>
    <artifactId>java-driver-mapper-api</artifactId>
    <version>4.14.1</version>
</dependency>
<dependency>
    <groupId>com.datastax.oss</groupId>
    <artifactId>java-driver-mapper-runtime</artifactId>
    <version>4.14.1</version>
</dependency>

2. 修正主键类RKey

给RKey类添加@PrimaryKeyClass注解,明确这是一个复合主键的封装类:

import com.datastax.oss.driver.api.mapper.annotations.PartitionKey;
import com.datastax.oss.driver.api.mapper.annotations.PrimaryKeyClass;
import com.datastax.oss.driver.api.mapper.annotations.CqlName;

@PrimaryKeyClass
public class RKey {

    @PartitionKey(0)
    @CqlName("mart_id")
    public int martId;

    @PartitionKey(1)
    @CqlName("product_id")
    public String productId;

    @PartitionKey(2)
    @CqlName("store_id")
    public String storeId;
    
    // Driver需要无参构造方法用于反射实例化
    public RKey() {}
    
    // 可选:添加带参构造方便创建主键对象
    public RKey(int martId, String productId, String storeId) {
        this.martId = martId;
        this.productId = productId;
        this.storeId = storeId;
    }
}

3. 修正实体类RDAO

在RDAO的pk字段上添加@PrimaryKey注解,让Driver识别这个字段对应表的主键:

import com.datastax.oss.driver.api.mapper.annotations.Entity;
import com.datastax.oss.driver.api.mapper.annotations.CqlName;
import com.datastax.oss.driver.api.mapper.annotations.PrimaryKey;
import java.nio.ByteBuffer;

@Entity
@CqlName("abc")
public class RDAO {

    @PrimaryKey
    private RKey pk;
   
    @CqlName("compressed_rollup_data")
    private ByteBuffer compressedRollupData;
    
    @CqlName("metadata")
    private String metadata;
    
    // Driver需要无参构造方法
    public RDAO() {}
    
    // 提供所有字段的getter/setter,保证Driver能正常访问字段
    public RKey getPk() {
        return pk;
    }

    public void setPk(RKey pk) {
        this.pk = pk;
    }

    public ByteBuffer getCompressedRollupData() {
        return compressedRollupData;
    }

    public void setCompressedRollupData(ByteBuffer compressedRollupData) {
        this.compressedRollupData = compressedRollupData;
    }

    public String getMetadata() {
        return metadata;
    }

    public void setMetadata(String metadata) {
        this.metadata = metadata;
    }
}

关键说明

  • @PrimaryKeyClass是Driver识别复合主键类的必要注解,没有它Driver无法将这个类与表的主键关联。
  • @PrimaryKey注解标记实体类中的主键字段,告诉Driver该字段对应表的主键集合。
  • 实体类和主键类都必须提供无参构造方法;如果字段是private权限,必须配套getter/setter,否则Driver无法完成实例化和字段读写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:54:22