保存Spring数据的Iterable Cassandra实体会产生异常

时间:2016-04-12 12:12:24

标签: spring-data spring-data-cassandra

我有一个非常简单的Groovy实体,用Spring Data Cassandra注释注释。我写了一个基于CrudRepository接口的repo。在我的单元测试中,我正在使用Cassandra Unit和Spring Test测试repo中的各种方法。我正在测试的界面中的所有其他方法似乎都可以正常工作。我可以使用带注释的实体从我的应用程序中插入,删除,搜索等。但是当我尝试通过repo保存实体的Iterable时,它失败并出现以下异常:

org.springframework.data.cassandra.mapping.VerifierMappingExceptions: java.util.ArrayList:
Cassandra entities must have the @Table, @Persistent or @PrimaryKeyClass Annotation

at org.springframework.data.cassandra.mapping.BasicCassandraPersistentEntityMetadataVerifier.verify(BasicCassandraPersistentEntityMetadataVerifier.java:45)
at org.springframework.data.cassandra.mapping.BasicCassandraPersistentEntity.verify(BasicCassandraPersistentEntity.java:198)
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:317)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:179)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:139)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:66)
at org.springframework.data.cassandra.core.CassandraTemplate.getTableNamndraTemplate.java:217)
at org.springframework.data.cassandra.core.CassandraTemplate.doInsert(CassandraTemplate.java:641)
at org.springframework.data.cassandra.core.CassandraTemplate.insert(CassandraTemplate.java:237)
at org.springframework.data.cassandra.core.CassandraTemplate.insert(CassandraTemplate.java:232)
at x.y.z.repositories.UserRepositoryImpl.save(UserRepositoryImpl.java:44)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:718)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
at x.y.z.repositories.UserDataRepositorySpec.verify saving a list(UserDataRepositorySpec.groovy:186)

因此,保存,删除或修改单个实体实例的工作正常,但只要我创建一个List(由ArrayList支持),它就会因此错误而失败。实体本身看起来像这样:

@InheritConstructors
@EqualsAndHashCode
@ToString
@Table("user_data")
class UserData {
  @PrimaryKey("id")
  long userId
  @Column
  String name
}

似乎反直觉我必须创建一个特殊类型的List才能保存实体集合。我错过了什么吗?我正在使用带有DataStax驱动核心2.1.9的Spring Cassandra 1.3.4。谢谢。

0 个答案:

没有答案