Cassandra @Entity注解映射is_开头列编译报CQL错误如何解决?
问题原因
这不是Cassandra的@Entity注解无法匹配以is_开头的列,本质是对象映射框架的布尔类型属性默认命名策略导致的问题。
你所使用的Cassandra对象映射框架(无论是Datastax官方Java驱动的映射模块还是Spring Data Cassandra),针对布尔类型属性有默认的命名约定:如果属性名以is开头,框架会自动截断is前缀来生成对应的CQL列名。你代码里声明的布尔属性名为is_deleted,就被框架自动处理成了_deleted,和表中实际存在的列名is_deleted不匹配,因此抛出了Invalid CQL form [_deleted] needs double quotes的错误。
解决方案
你可以任选以下一种方式解决:
- 显式给字段添加
@CqlName注解指定实际列名,规避默认命名策略的自动转换:
@Entity @CqlName("test_data_table") data class RtawData( @PartitionKey var id: String? = null, @ClusteringColumn var name: String? = null, var start_time: Long? = null, @CqlName("is_deleted") var is_deleted: Boolean? = null )
- 调整属性命名符合Kotlin/Java的驼峰命名规范,同时用
@CqlName绑定表列名,代码可读性更高:
@Entity @CqlName("test_data_table") data class RtawData( @PartitionKey var id: String? = null, @ClusteringColumn var name: String? = null, var startTime: Long? = null, @CqlName("is_deleted") var deleted: Boolean? = null )
- (不推荐)如果需要批量处理同类
is_开头的布尔列,也可以全局修改框架的命名策略,关闭布尔类型的is前缀截断逻辑,该方式会影响所有实体类的字段映射规则,容易引发其他未知问题。
内容的提问来源于stack exchange,提问作者user13902742
相关产品推荐
相关产品推荐

