我有卡桑德拉表如下
create table user(
id UUID PRIMARY KEY,
firstname varchar,
secondname varchar,
emailid varchar,
);
从Java-Spring Boot Im正在尝试访问数据
Optional<User> findByEmailid(String emailId);
我收到错误说明
它要求我使用查询的“允许过滤”部分。无论如何有全局启用此功能,还是我应该更改查询/数据库结构?
最佳答案
该错误告诉您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
表,那么确实没有理由将该列用作您的唯一主键。