Использование поля usertype, объявленного при моделировании сущностей данных в документации Spring-data cassandra - PullRequest
0 голосов
/ 14 июля 2020

Я просматривал документацию по Spring data cassandra. Я наткнулся на этот пример, объясняющий определение пользовательского типа данных в cassandra db с аннотацией. Я не смог понять использование поля "usertype" типа UDTValue, определенного лично. Аннотация, используемая над адресом, - это «адрес». Нужна помощь в понимании того, как поле адреса связано с классом 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
}
...