gpt4 book ai didi

scala - @PrimaryKeyColumn 注释必须具有 PARTITIONED 类型,用于 scala Cassandra Spring Data 应用程序

转载 作者:行者123 更新时间:2023-12-04 14:53:56 26 4
gpt4 key购买 nike

我正在使用 Scala 开发 Cassandra Spring-data 模块。我已经创建了域模型和设置 crud 存储库。

Spring数据存储库设置如下:

@Repository
trait SampleRepository extends CassandraRepository[Sample, SampleKey]

表域模型设置如下:
@Table
case class Sample(@PrimaryKey
sampleKey: SampleKey,
@Column("surName")
surName: String)

主键是复合键。 Id 列作为分区键。名称列作为集群键
@PrimaryKeyClass
case class SampleKey(
@PrimaryKeyColumn( `type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
id: Int,
@PrimaryKeyColumn( `type` = PrimaryKeyType.CLUSTERED, ordinal = 1, name = "name")
name: String
)

在 scala 中 type 是一个有效的关键字,因此使用了反向引号。我希望这可以工作,但是当我启动应用程序时,我得到了
Suppressed: org.springframework.data.mapping.MappingException: Composite primary key type [com.barclays.decisionstore.trac.model.SampleKey] has no fields annotated with @PrimaryKeyColumn
at org.springframework.data.cassandra.core.mapping.PrimaryKeyClassEntityMetadataVerifier.verify(PrimaryKeyClassEntityMetadataVerifier.java:91)
... 262 common frames omitted
Suppressed: org.springframework.data.mapping.MappingException: At least one of the @PrimaryKeyColumn annotations must have a type of PARTITIONED
at org.springframework.data.cassandra.core.mapping.PrimaryKeyClassEntityMetadataVerifier.verify(PrimaryKeyClassEntityMetadataVerifier.java:98)
... 262 common frames omitted

这意味着 Spring-Data 无法识别注解的类型参数。
与 java 模型类相同的代码可以正常工作。

将不胜感激任何指针或替代解决这个问题。

最佳答案

实际上,除了注释之外,Java bean 属性无法识别。

Scala 在 case 默认情况下不将实例变量绑定(bind)为 bean 属性。类。为此,您需要添加 @BeanProperty每个属性的注释。

import scala.beans.BeanProperty

@PrimaryKeyClass
case class SampleKey(@BeanProperty
@PrimaryKeyColumn(`type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
id: Int,
@BeanProperty
@PrimaryKeyColumn(`type` = PrimaryKeyType.CLUSTERED, ordinal = 1, name = "name")
name: String)

此外,如果您遇到对象构造错误,请添加具有默认值的构造函数(这需要创建变量 var ):
@PrimaryKeyClass
case class SampleKey(@BeanProperty
@PrimaryKeyColumn(`type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
var id: Int,
@BeanProperty
@PrimaryKeyColumn(`type` = PrimaryKeyType.CLUSTERED, ordinal = 1, name = "name")
var name: String) {
def this() = this(0, "")
}

希望这可以帮助!

关于scala - @PrimaryKeyColumn 注释必须具有 PARTITIONED 类型,用于 scala Cassandra Spring Data 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54107616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com