Spring Cassandra使用自定义对象存储List

Dan*_*ich 3 java database spring list cassandra

我想存储一个像这样的对象:

@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;
}
Run Code Online (Sandbox Code Playgroud)

然后我得到了例外:

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]
Run Code Online (Sandbox Code Playgroud)

我确实理解异常,但还有另一种方法可以保留自定义对象吗?

编辑:

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

Dan*_*ich 7

!永远不要说永远,我得到了解决方案.

举个好例子,我将列出所有相应的类.

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;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

@UserDefinedType是解决方案.
欲了解更多信息,请点击这里.

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