我有Cassandra表如下
create table user(
id UUID PRIMARY KEY,
firstname varchar,
secondname varchar,
emailid varchar,
);
从Java - Spring Boot我试图访问数据
Optional<User> findByEmailid(String emailId);
我收到错误陈述
它要求我使用“FILTERING ALLOWED”部分查询。反正有没有全局启用它,或者我应该更改查询/数据库结构?
答案 0 :(得分:1)
该错误告诉您emailid
不是可在WHERE子句中过滤的有效列。在该列上启用ALLOW FILTERING
或创建二级索引是实现此目的的一种方法。但这两个都是非常可怕的解决方案(因为Cassandra是如何工作的。)
使用Cassandra,您需要采用基于查询的建模方法。这意味着有时(通常)查询和表共享1:1的比例。如果您确实需要通过电子邮件地址查询用户,则需要创建一个表来提供该查询。
CREATE TABLE user_by_email(
id UUID,
firstname varchar,
secondname varchar,
emailid varchar PRIMARY KEY,
);
然后这样的事情会起作用:
Optional<UserByEmail> findByEmailid(String emailId);
如果您没有计划通过user
查询id
表,那么就没有理由将该列用作唯一的主键。