【问题标题】:Spring Data Cassandra query by a property of composite primary key通过复合主键的属性进行 Spring Data Cassandra 查询
【发布时间】:2021-12-27 19:03:49
【问题描述】:

我将表的主键作为由 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);
}

我有以下类作为我的 User 表的键。

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-boot cassandra spring-data-cassandra


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-10-06
      • 2016-03-25
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 2014-05-07
      • 1970-01-01
      相关资源
      最近更新 更多