Spring数据Cassandra多态,覆盖列定义

时间:2018-01-12 10:34:38

标签: cassandra cassandra-3.0 spring-data-cassandra

为了对表进行非规范化,我创建了一个类的层次结构。表格非常广泛,以便管理麻烦和错误,我想声明父级中的所有字段,然后更改子级中特定字段的定义。通过这种方式,我可以将父级中的普通列重新定义为子级中主键的一部分。

E.g:

基础超类

public class A {
  @Column
  protected int age;
}

类扩展A

@Table
public class B extends A {
  @PrimaryKey
  protected K key;
  ...
}

A的主键,其中包含age列的新定义。

@PrimaryKeyClass
public class K {
  @PrimaryKeyColumn
  private int age;
  @PrimaryKeyColumn
  private int ignore;
}

这似乎不起作用。我收到Multiple definition of identifier例外。

到目前为止,我只能声明在父级中不会发生变化的字段,然后在每个子级中声明所有可能更改的字段。我不喜欢这样,因为我必须事先知道可能成为未来主键一部分的每个字段。

将注释放在(父)getter上并覆盖它们似乎没有做任何事情。

除了在父级中只保留永不改变的列之外,还有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

  

将注释放在(父)getter上并覆盖它们似乎没有做任何事情。

用@Transient注释儿童的吸气者!

所以:注释父getter而不是字段,让child getters @Transient,将列定义移动到键中,完成。

从这里开始:

http://docs.datastax.com/en/developer/java-driver/3.1/manual/object_mapper/creating/

  

注释getter方法的一个强大优势是注释是从超类和超接口中的重写方法继承的;换句话说,如果在子类中重写了getter方法,则两个方法声明中的注释将合并在一起。如果在此合并过程中发现重复注释,则覆盖方法的注释将优先于重写注释。