Him*_*ire 6 scala cassandra spring-data spring-data-cassandra
我正在使用Scala处理Cassandra Spring数据模块.我创建了域模型和设置crud存储库.
Spring数据存储库的设置如下:
@Repository
trait SampleRepository extends CassandraRepository[Sample, SampleKey]
Run Code Online (Sandbox Code Playgroud)
表域模型设置如下:
@Table
case class Sample(@PrimaryKey
sampleKey: SampleKey,
@Column("surName")
surName: String)
Run Code Online (Sandbox Code Playgroud)
主键是复合键.Id列作为分区键.将列命名为Cluster key
@PrimaryKeyClass
case class SampleKey(
@PrimaryKeyColumn( `type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
id: Int,
@PrimaryKeyColumn( `type` = PrimaryKeyType.CLUSTERED, ordinal = 1, name = "name")
name: String
)
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
这意味着Spring-Data无法识别注释的类型参数.
与java模型类相同的代码可以正常工作.
将不胜感激任何指针或替代解决此问题.
实际上java bean属性除注释外无法识别.
默认情况下,Scala不会将实例变量绑定为bean属性case.为此,您需要@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)
Run Code Online (Sandbox Code Playgroud)
此外,如果您收到对象构造错误,请添加具有默认值的构造函数(这需要生成变量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, "")
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |