【发布时间】:2020-11-16 21:28:22
【问题描述】:
我有以下 POJO:
@Entity
public class Order {
@Column(name = "id")
@PartitionKey
private String id;
@Column(name = "customer_id")
private String customerId;
@Column(name = "loyalty_id")
private String loyaltyId;
@Column(name = "customer_email")
private String customerEmail;
public Order() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
... getters and setters
}
在以下代码中获取异常:
CqlSession session = CqlSession.builder().build();
OrderMapper mapper = new OrderMapperBuilder(session).build();
orderDao = mapper.orderDao(CqlIdentifier.fromCql(connectionManager.getSession().getLoggedKeyspace()));
connectionManager的定义在这里:https://pastebin.com/b3GKJuV6
例外情况如下:
Entity Order does not declare a primary key
com.datastax.oss.driver.api.mapper.MapperException: Entity Order does not declare a primary key
at com.datastax.oss.driver.api.mapper.MapperException.copy(MapperException.java:44)
at com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptibly(CompletableFutures.java:149)
...
我正在按照此处的文档进行实施:https://docs.datastax.com/en/developer/java-driver/4.2/manual/mapper/。这可能是什么原因?
编辑:- 添加架构定义:
CREATE TABLE order_keyspace.order (
id text PRIMARY KEY,
customer_email text,
customer_id text,
loyalty_id text
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
【问题讨论】:
-
你的keyspace也叫order吗? mapper.orderDao(CqlIdentifier.fromCql("order"));似乎表明它是,但只是想仔细检查。
-
@Andrew 是的,仅此而已。我也尝试过使用 session 中的 loggedKeySpace。
-
@Andrew 我有一个名为 ConnectionManager 的类,如下所示:pastebin.com/b3GKJuV6 和另一个名为 OrderRepositoryService 的类,其中连接管理器用作:pastebin.com/8gnWr149
标签: java datastax datastax-java-driver