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

Spring Data Cassandra自动查询报InvalidQueryException:表未配置

Spring Data Cassandra 查询报错问题分析

问题场景

定义了如下Person实体类:

@Table("person_details")
class Person{

 @PrimaryKeyColumn(value = "person_id", type = PrimaryKeyType.PARTITIONED)
private String personId;

  @Column(value = "age")  
  private Integer age;

  public void setAge(Integer age){
   this.age = age;
  }
  public Integer getAge(){
   return age;
  }
}

对应的仓库接口:

public interface PresonRepo extends CassandraRepository<Person, String>{
     @AllowFiltering 
     findAllByAgeGreaterThan(int age);
}

执行findAllByAgeGreaterThan方法时抛出错误:

InvalidQueryException: unconfigured table person_details

日志显示自动生成的查询语句:

Preparing statement [SELECT * FROM "person_details" WHERE age>?

但使用@Query手动编写的查询却能正常执行:

@Query("select * from person_details where age >?0 ALLOW FILTERING")
findByAgeGreaterThan (int age); //执行成功

使用的版本信息:

  • cassandra driver - 4.15.0
  • spring boot 2.7.7
  • spring data cassandra 3.4.6

原因分析

核心问题在于自动生成的SQL里表名被添加了双引号"person_details",而手动编写的SQL没有加双引号。

在Cassandra中,带双引号的标识符会严格区分大小写,不带双引号的标识符则会自动转为小写(除非创建表时用双引号指定了大小写)。如果你的Cassandra实际表名是小写的person_details,那么带双引号的"person_details"会被Cassandra判定为不存在的表,从而抛出“未配置表”的错误。

Spring Data Cassandra默认会给自动生成查询里的表名、列名添加双引号,用于兼容大小写敏感的标识符场景,但如果你的表是小写创建的,就会出现匹配失败的问题。

解决办法

有两种可行的解决方式:

  1. 关闭标识符的引号转义
    在Spring配置中添加以下配置,让自动生成SQL时不再添加双引号:
spring.data.cassandra.query.quote-identifiers=false

或者在Java配置类中设置:

@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {
    // 其他配置项...
    @Override
    protected boolean getQuoteIdentifiers() {
        return false;
    }
}
  1. 对齐实体类表名与实际表名的大小写
    如果你的Cassandra表是用双引号创建的(比如CREATE TABLE "Person_Details" (...)),则需要调整实体类的@Table注解名称为对应大小写:
@Table("Person_Details")
class Person {
    // ...
}

补充说明

手动编写@Query时没有添加双引号,查询会自动匹配实际的小写表名,这就是手动查询成功而自动生成查询失败的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:12:20