【问题标题】:Spring Data Cassandra Naming StrategySpring Data Cassandra 命名策略
【发布时间】:2021-09-05 17:34:08
【问题描述】:

Kotlin + Spring Boot Cassandra 应用程序忽略了 @Column("column_name") 注释。下面的注释

@Column("order_details")
val orderDetails: String

正在映射到 orderdetails 而不是 order_details。由于表中不存在orderdetails 列,因此会导致运行时错误。

为什么spring data Cassandra的@Column默认不映射到snake case? 即使在将值传递给@Column 映射之后,为什么它会被忽略? 是否需要在应用程序属性中设置任何其他属性,以便 Spring Data Cassandra 使用蛇案例进行物理映射?

@Table("order_by_customer")
data class CustomerOrder(
    @PrimaryKeyColumn(name = "customer_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    val customerId: UUID,
    @Column("order_details")
    val orderDetails: String,
    @Column("ordered_at")
    val orderedAt: LocalDate
)

生成的插入查询 INSERT INTO order_by_customer (customer_id,orderdetails,orderedat)

虽然 PK 的注释起作用,但 Column 的注释被忽略

【问题讨论】:

    标签: spring cassandra spring-data-cassandra


    【解决方案1】:

    根据 spring-data-cassandra 团队提供的解决方案。数据类需要如下编码

        @Table("order_by_customer")
        data class CustomerOrder(
            @PrimaryKeyColumn(name = "customer_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
            val customerId: UUID,
            @field:Column("order_details")
            val orderDetails: String,
            @field:Column("ordered_at")
            val orderedAt: LocalDate
        )
    

    https://github.com/spring-projects/spring-data-cassandra/issues/1146

    https://kotlinlang.org/docs/annotations.html#annotation-use-site-targets

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 2015-11-16
      • 2020-03-18
      • 1970-01-01
      • 2020-06-06
      相关资源
      最近更新 更多