使用DSE的Java API映射Cassandra Materialized View

8
我有一个带有相关物化视图的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应用程序时,出现以下错误:

Error:java: 无法找到基本实体类“mypackage.MyTableType”,用于视图类“mypackage.MyTableTypeByRelatedId”。 Error:java: 解析过程中出错:无法找到基本实体类“mypackage.MyTableType”,用于视图类“mypackage.MyTableTypeByRelatedId”。

看起来有一些代码生成正在进行,因此似乎某些内容没有正确生成,但我无法确定是什么。
我发现的唯一略微有用的文档是herehere,但似乎都没有提供帮助。
我做错了什么?
2个回答

1

好的,虽然这不是一个很明确的问题,但是有类似问题的人可能会发现这个回答有用。

这个具体的问题是因为我看错了数据库,导致我创建的表和视图不存在。我有一个属性覆盖文件,我认为设置正确了,但这是我的错误。


0

你尝试在 @MaterializedView 注解中添加 keyspace 值了吗?

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

是的。我试过了。通常会给我一个不同的错误,但仍然无法工作。谢谢。 - redwulf
我创建了一个新的表和物化视图,只有几个字段用于测试。使用键空间时,我遇到了info.archinnov.achilles.exception.AchillesException错误:在Cassandra中未定义实体mypackage.MyTableType上定义的表my_table。这真的没有意义,因为正如你指出的那样,它在一个键空间中,所以应该被指定。但是我收到了这个错误。 - redwulf
@MaterializedView 注解是从哪里来的?它是 DSE API 还是 Spring Data Cassandra 的一部分?我在这些地方都找不到这样的注解。 - Marchev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接