@PrimaryKeyColumn 注释必须具有 PARTITIONED 类型,用于 scala Cassandra Spring 数据应用程序
@PrimaryKeyColumn annotations must have a type of PARTITIONED for scala Cassandra Spring Data application
我正在使用 Scala 开发 Cassandra Spring-数据模块。我已经创建了域模型并设置了 crud 存储库。
Spring 数据存储库设置如下:
@Repository
trait SampleRepository extends CassandraRepository[Sample, SampleKey]
Table 域模型设置如下:
@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
类 默认情况下不会将实例变量绑定为 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, "")
}
希望对您有所帮助!
它在与 class.
的 class 一起使用时工作
@PrimaryKeyClass
class SimpleKey{
@PrimaryKeyColumn( `type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
var id: Int =_
@PrimaryKeyColumn( `type` = PrimaryKeyType.CLUSTERED, ordinal = 1, name = "name")
var name: String =_
}
我正在使用 Scala 开发 Cassandra Spring-数据模块。我已经创建了域模型并设置了 crud 存储库。
Spring 数据存储库设置如下:
@Repository
trait SampleRepository extends CassandraRepository[Sample, SampleKey]
Table 域模型设置如下:
@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
类 默认情况下不会将实例变量绑定为 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, "")
}
希望对您有所帮助!
它在与 class.
的 class 一起使用时工作@PrimaryKeyClass
class SimpleKey{
@PrimaryKeyColumn( `type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
var id: Int =_
@PrimaryKeyColumn( `type` = PrimaryKeyType.CLUSTERED, ordinal = 1, name = "name")
var name: String =_
}