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

Spring Kotlin环境下创建Cassandra表失败,请求排查问题原因

问题分析:Cassandra表不存在异常

错误信息

Caused by: org.springframework.data.cassandra.CassandraInvalidQueryException: Query; CQL [TRUNCATE ingredients]; table ingredients does not exist

相关代码

实体类代码

@Data
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE, force = true)
@Table("ingredients")
data class Ingredients(
    @PrimaryKey
    val id: String,
    val name: String,
    val type: Type
)

UDT代码

@Data
@RequiredArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE, force = true)
@UserDefinedType("ingredients")
data class IngredientUDT(
    var name: String,
    var type: Type
)

配置类代码

@Configuration
@EnableCassandraRepositories
class DataInitializer: AbstractCassandraConfiguration() {
 
    @Primary
    fun cqlSession(): CqlSession {
        return CqlSession.builder().build()
    }

    override fun getKeyspaceName(): String {
        return "tacocloud"
    }

    override fun getEntityBasePackages(): Array<String> {
        return arrayOf("sia.tacocloud")
    }

    @Bean
    fun dataLoader(repo: IngredientsRepository): ApplicationRunner {
        return ApplicationRunner {
            repo.deleteAll()
            repo.save(Ingredients("FLTO", "Flour Tortilla", Type.WRAP))
            repo.save(Ingredients("COTO", "Corn Tortilla", Type.WRAP))
            repo.save(Ingredients("GRBF", "Ground Beef", Type.PROTEIN))
            repo.save(Ingredients("CARN", "Carnitas", Type.PROTEIN))
            repo.save(Ingredients("TMTO", "Diced Tomatoes", Type.VEGGIES))
            repo.save(Ingredients("LETC", "Lettuce", Type.VEGGIES))
            repo.save(Ingredients("CHED", "Cheddar", Type.CHEESE))
            repo.save(Ingredients("JACK", "Monterrey Jack", Type.CHEESE))
            repo.save(Ingredients("SLSA", "Salsa", Type.CHEESE))
            repo.save(Ingredients("SRCR", "Sour Cream", Type.CHEESE))
        }
    }
}

配置文件内容

#Cassandra settings
spring.data.cassandra.keyspace-name = tacocloud
spring.data.cassandra.schema-action = RECREATE
spring.data.cassandra.local-datacenter = datacenter1
basic.load-balancing-policy.local-datacenter = datacenter1
spring.data.cassandra.contact-points=127.0.0.1
spring.data.cassandra.port=9042
spring.data.cassandra.username = ***
spring.data.cassandra.password = ***

问题原因

  1. 命名冲突:同一keyspace下,UDT和表的名称不能重复。你用@UserDefinedType("ingredients")定义了名为ingredients的UDT,同时又用@Table("ingredients")定义了同名的实体表,导致Spring Data Cassandra无法正常创建表。
  2. 会话配置不匹配:配置类中重写的cqlSession()方法直接创建默认会话,没有使用配置文件中的用户名、密码、数据中心等参数,可能导致会话连接的配置与预期不符,进一步阻碍表的自动创建。

内容的提问来源于stack exchange,提问作者Saher Al-Sous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:05:15