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

Cassandra中@PrimaryKeyColumn指定列名不生效问题求助

问题解决方案

一、主键列名不生效的解决方法

你的主键字段同时标注了@Id和@PrimaryKeyColumn,这会造成注解冲突,Spring Data Cassandra会优先使用@Id对应的默认属性名(即timeUUID)作为列名。要让@PrimaryKeyColumn的name属性生效,只需移除@Id注解即可,修改后的代码如下:

@Table(value = "messages_by_id")
public class Email {
    @PrimaryKeyColumn(name = "id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    private UUID timeUUID;
    
    @CassandraType(type = CassandraType.Name.TEXT)
    @Column(name = "from") // "from"是Cassandra关键字,显式指定列名避免语法冲突
    private String from;
    
    @CassandraType(type = CassandraType.Name.LIST, typeArguments = CassandraType.Name.TEXT)
    @Column(name = "to") // "to"同样是关键字,建议显式指定列名
    private List<String> to;
    
    @CassandraType(type = CassandraType.Name.TEXT)
    private String subject;
    
    @CassandraType(type = CassandraType.Name.TEXT)
    private String body;
}

补充说明:如果需要定义复合主键,才需要配合@PrimaryKeyClass或@PrimaryKeyConstructor使用,单主键场景直接用@PrimaryKeyColumn即可。

二、与JPA/Hibernate的关联问题

这个问题和JPA、Hibernate完全无关。你当前使用的@Table、@PrimaryKeyColumn、@CassandraType都是Spring Data Cassandra或DataStax Java Driver的专属注解,用于Cassandra这种NoSQL数据库的持久化操作。而JPA是关系型数据库的持久化规范,Hibernate是JPA的实现,两者属于不同的技术栈,没有关联。

内容的提问来源于stack exchange,提问作者Thành Gành Team

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:35:28