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
相关产品推荐
相关产品推荐

