在spring数据cassandra文档中实体建模数据中声明的usertype字段的使用

cbeh67ev  于 2021-06-13  发布在  Cassandra
关注(0)|答案(0)|浏览(240)

我在看Cassandra的Spring Data 文档。我遇到了这个例子,它解释了如何在cassandradb中用注解定义用户定义的数据类型。我无法理解亲自定义的udtvalue类型的“usertype”字段的用法。地址上面的注解是“address”。需要帮助理解地址字段在person中是如何链接到address类的。

@Table("my_person")
public class Person {

  @PrimaryKeyClass
  public static class Key implements Serializable {

    @PrimaryKeyColumn(ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    private String type;

    @PrimaryKeyColumn(ordinal = 1, type = PrimaryKeyType.PARTITIONED)
    private String value;

    @PrimaryKeyColumn(name = "correlated_type", ordinal = 2, type = PrimaryKeyType.CLUSTERED)
    private String correlatedType;

    // other getters/setters omitted
  }

  @PrimaryKey
  private Person.Key key;

  @CassandraType(type = CassandraType.Name.VARINT)
  private Integer ssn;

  @Column("f_name")
  private String firstName;

  @Column
  @Indexed
  private String lastName;

  private Address address;

  @CassandraType(type = CassandraType.Name.UDT, userTypeName = "myusertype")
  private UdtValue usertype;

  private Coordinates coordinates;

  @Transient
  private Integer accountTotal;

  @CassandraType(type = CassandraType.Name.SET, typeArguments = CassandraType.Name.BIGINT)
  private Set<Long> timestamps;

  private Map<@Indexed String, InetAddress> sessions;

  public Person(Integer ssn) {
    this.ssn = ssn;
  }

  public Person.Key getKey() {
    return key;
  }

  // no setter for Id.  (getter is only exposed for some unit testing)

  public Integer getSsn() {
    return ssn;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  // other getters/setters omitted
}
The following example shows how to map a UDT Address:

Example 111. Mapped User-Defined Type Address
@UserDefinedType("address")
public class Address {

  @CassandraType(type = CassandraType.Name.VARCHAR)
  private String street;

  private String city;

  private Set<String> zipcodes;

  @CassandraType(type = CassandraType.Name.SET, typeArguments = CassandraType.Name.BIGINT)
  private List<Long> timestamps;

  // other getters/setters omitted
}
@UserDefinedType("address")
public class Address {

  @CassandraType(type = CassandraType.Name.VARCHAR)
  private String street;

  private String city;

  private Set<String> zipcodes;

  @CassandraType(type = CassandraType.Name.SET, typeArguments = CassandraType.Name.BIGINT)
  private List<Long> timestamps;

  // other getters/setters omitted
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题