使用 DSE Java API 映射 Cassandra 物化视图
Map Cassandra Materialized View with DSE's Java API
我有一个 cassandra table 具有关联的物化视图。
主键是一个uuid类型的id,我没有sort key。我们称它为 my_table_id
。此 table 包含我要用于搜索的 related_id
。
然后我有一个物化视图 table 定义为
PRIMARY KEY (related_id, my_table_id) WITH CLUSTERING ORDER BY (my_table_id ASC)
PS:我意识到这是在Cassandra中分区数据的错误方式,但不幸的是,这段代码被继承了。
我在 java 代码中将 table 定义为:
@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 启动应用程序时,我得到:
Error:java: Cannot find base entity class
'mypackage.MyTableType' for view class
'mypackage.MyTableTypeByRelatedId'
Error:java: Error while parsing: Cannot find base entity class
'mypackage.MyTableType' for view class
'mypackage.MyTableTypeByRelatedId'
正在进行一些代码生成,因此似乎生成的内容不正确,但我不太清楚是什么。
我找到的唯一有用的文档是 here and here,但 none 似乎可以提供帮助。
我做错了什么?
您是否尝试过在您的@MaterializedView 注释上添加键空间值?
@MaterializedView(keyspace = "xxxx", baseEntity = MyTableType.class, view = "my_table_by_related_id")
嗯,答案不多,因为这不是一个问题,但遇到类似问题的人可能会觉得它有用。
这个具体问题是因为我看错了数据库,当然没有我创建的表和视图。我有一个 属性 我认为设置正确的覆盖文件,那是我的错误。
我有一个 cassandra table 具有关联的物化视图。
主键是一个uuid类型的id,我没有sort key。我们称它为 my_table_id
。此 table 包含我要用于搜索的 related_id
。
然后我有一个物化视图 table 定义为
PRIMARY KEY (related_id, my_table_id) WITH CLUSTERING ORDER BY (my_table_id ASC)
PS:我意识到这是在Cassandra中分区数据的错误方式,但不幸的是,这段代码被继承了。
我在 java 代码中将 table 定义为:
@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 启动应用程序时,我得到:
Error:java: Cannot find base entity class 'mypackage.MyTableType' for view class 'mypackage.MyTableTypeByRelatedId' Error:java: Error while parsing: Cannot find base entity class 'mypackage.MyTableType' for view class 'mypackage.MyTableTypeByRelatedId'
正在进行一些代码生成,因此似乎生成的内容不正确,但我不太清楚是什么。
我找到的唯一有用的文档是 here and here,但 none 似乎可以提供帮助。
我做错了什么?
您是否尝试过在您的@MaterializedView 注释上添加键空间值?
@MaterializedView(keyspace = "xxxx", baseEntity = MyTableType.class, view = "my_table_by_related_id")
嗯,答案不多,因为这不是一个问题,但遇到类似问题的人可能会觉得它有用。
这个具体问题是因为我看错了数据库,当然没有我创建的表和视图。我有一个 属性 我认为设置正确的覆盖文件,那是我的错误。