spring-boot - 通过复合主键的属性进行 Spring Data Cassandra 查询
问题描述
我将表的主键作为由 3 个字段组成的复合键:id、用户名和电子邮件。我希望能够仅通过用户名或仅通过电子邮件查询用户,而无需了解其他键。
我尝试在存储库中声明一个方法,但它给出了错误No property userKeyUsername found for type User!
这是我的存储库界面:
@Repository
public interface UserRepo extends CassandraRepository<User, UserKey>{
User findByUserKeyEmail(String email);
User findByUserKeyUsername(String username);
}
我有以下类作为我的用户表的键。
public class UserKey {
@PrimaryKeyColumn(name = "id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
private UUID id;
@PrimaryKeyColumn(name = "username", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
private String username;
@PrimaryKeyColumn(name = "email", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
private String email;
//equals and hashcode
}
而这个类作为我的用户模型:
public class User {
@PrimaryKey
private UserKey key;
@Column("first_name")
@CassandraType(type = Name.TEXT)
private String firstName;
@Column("last_name")
@CassandraType(type = Name.TEXT)
private String lastName;
@Column("password")
@CassandraType(type = Name.TEXT)
private String password;
@Column("roles")
@CassandraType(type = Name.LIST, typeArguments = Name.TEXT)
private List<Role> roles = new ArrayList<>();
}
解决方案
要检索数据,必须提供分区键中定义的所有三列。您可以使用二级索引作为解决方法,但不建议这样做。我建议首先确定您想要执行的所有查询,然后根据它们重新设计您的数据模型。
推荐阅读
- r - 创建一个函数来计算赔率
- scala - Scala/Akka/Protobuf:无法序列化和反序列化消息
- javascript - 在 2 条线之间绘制弧线并在 2 点之间绘制曲线
- arrays - 位串和标志移位
- mybatis - MyBatis:如何映射嵌套对象
- javascript - 创建一个只能由应用程序访问的本地文件夹,以将下载的文件保存在 react native 中
- quickbooks - 刷新令牌在 Quickbook 中的 2 天后过期
- c# - 简单的 LINQ 到实体翻译
- javascript - 错误:在 Process.ChildProcess._handle.onexit 产生 cmd ENOENT (internal/child_process.js:240:19)
- django - 需要有关创建基于 Django 的仪表板的指导