使用DSE的Java API映射Cassandra物化视图

时间:2018-09-04 08:42:57

标签: java cassandra datastax datastax-java-driver

我有一个带有相关实例化视图的cassandra表。

主键是uuid类型的单个ID,我没有排序键。我们称之为my_table_id。该表包含一个我要用来搜索的related_id

然后我为该表定义了一个物化视图

PRIMARY KEY (related_id, my_table_id) WITH CLUSTERING ORDER BY (my_table_id ASC)

PS:我意识到这是在Cassandra中对数据进行分区的错误方法,但是不幸的是,这段代码是继承的。

我在Java代码中将表定义为:

@Table(table = "my_table")
public class MyTableType {
    @PartitionKey
    @Column("my_table_id")
    @Codec(MyIdCassandraConverter.class)
    CustomUUIDType myTableId;

    @Column("related_id")
    @Codec(MyRelatedIdCassandraConverter.class)
    MyRelatedId relatedId;

   (...)
}

这两个自定义类型只是围绕UUID的包装。再次继承。

我的物化视图定义为:

@MaterializedView(baseEntity = MyTableType.class, view = "my_table_by_related_id")
public class MyTableTypeByRelatedId {
    @PartitionKey
    @Column("related_id")
    @Codec(MyRelatedIdCassandraConverter.class)
    MyRelatedId relatedId;

    @ClusteringColumn
    @Column("my_table_id")
    @Codec(MyIdCassandraConverter.class)
    CustomUUIDType myTableId;
}

代码似乎正确生成,但是当我启动Spring Boot应用程序时,我得到:

  

错误:java:找不到基本实体类   视图类的“ mypackage.MyTableType”   'mypackage.MyTableTypeByRelatedId'   错误:java:解析时出错:找不到基础实体类   视图类的“ mypackage.MyTableType”   'mypackage.MyTableTypeByRelatedId'

正在进行一些代码生成,因此似乎无法正确生成某些内容,但是我无法弄清楚是什么。

我发现唯一有用的文档是herehere,但似乎没有一个能提供帮助。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

好吧,答案不多,因为这不是一个问题,但是遇到类似问题的人可能会发现它很有用。

这个特定的问题是由于我查看错误的数据库引起的,该数据库当然没有我创建的表和视图。我有一个我认为设置正确的属性覆盖文件,这是我的错误。

答案 1 :(得分:0)

您是否尝试过在@MaterializedView批注上添加键空间值?

@MaterializedView(keyspace = "xxxx", baseEntity = MyTableType.class, view = "my_table_by_related_id")