【问题标题】:Spring Cassandra store a List with custom object'sSpring Cassandra 存储一个带有自定义对象的列表
【发布时间】:2017-11-06 14:24:14
【问题描述】:

我喜欢存储这样的对象:

@Table(value = "my_table")
public class MyTableDto {
  @PrimaryKeyColumn(name = "uid", type = PrimaryKeyType.PARTITIONED)
  @CassandraType(type = DataType.Name.UUID)
  private UUID uid;

  @Column(value = "child_ids")
  private List<ChildIdDto> childIds;
}

然后我得到了异常:

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: Only primitive types are allowed inside Collections for property [childIds] of type ['interface java.util.List'] in entity [de.myapplication.repository.dto.MyTableDto]

我确实了解该异常,但还有其他方法可以持久化自定义对象吗?

编辑:

  • 当我注释掉这个属性时,一切正常

【问题讨论】:

  • 你的意思是什么属性?
  • @YCF_L childIds。我只是想解释一下,异常不是由另一个属性引起的。
  • 好的,你能试试我的解决方案吗?
  • 通过@Frozen注释childIds
  • @AshrafulIslam 我没有这个注释

标签: java database spring list cassandra


【解决方案1】:

永远不要说永远,我有办法。

为了举一个很好的例子,我将列出所有相应的类。

ParentClass.java

@Table(value = "my_table") //OPT
public class MyTableDto {
  @PrimaryKeyColumn(name = "uid", type = PrimaryKeyType.PARTITIONED) 
  @CassandraType(type = DataType.Name.UUID)
  private UUID uid;

  @Column(value = "child_ids") //OPT
  private List<ChildDto> childIds;
}

ChildDto.java

@UserDefinedType // THE SOLUTION
public class ChildDto {
  @Column(value = "child") //OPT
  @CassandraType(type = DataType.Name.TEXT) //OPT
  private String groupId;

  @Column(value = "description") //OPT
  @CassandraType(type = Name.TEXT) //OPT
  private String description;
}

@UserDefinedType 是解决方案。
如需更多信息,请参阅here

注意:不需要每个带有“OPT”的注释

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 2017-03-26
  • 2016-04-23
  • 2023-03-29
  • 1970-01-01
  • 2017-03-13
相关资源
最近更新 更多