首页 > 解决方案 > 通过复合主键的属性进行 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<>();

}

标签: spring-bootcassandraspring-data-cassandra

解决方案


要检索数据,必须提供分区键中定义的所有三列。您可以使用二级索引作为解决方法,但不建议这样做。我建议首先确定您想要执行的所有查询,然后根据它们重新设计您的数据模型。


推荐阅读