Java 如何在Spring CassandraRepository中更新多个表

Java 如何在Spring CassandraRepository中更新多个表,java,spring,spring-boot,cassandra,spring-data-cassandra,Java,Spring,Spring Boot,Cassandra,Spring Data Cassandra,假设我在cassandra中有一个名为“UserPrincipal”的users表,存储库将如下所示 public interface UserRepository extends CassandraRepository<UserPrincipal> { @Query("SELECT * FROM UserPrincipal WHERE email = ?0") UserPrincipal findByEmailAddress(String emailAddress);

假设我在cassandra中有一个名为“UserPrincipal”的users表,存储库将如下所示

public interface UserRepository extends CassandraRepository<UserPrincipal> 
{
   @Query("SELECT * FROM UserPrincipal WHERE email = ?0")
   UserPrincipal findByEmailAddress(String emailAddress);   
}
public interface UserRepository扩展了CassandraRepository
{
@查询(“从UserPrincipal中选择*,其中电子邮件=?0”)
UserPrincipal findByEmailAddress(字符串emailAddress);
}
例如,如果我需要使用username查询表,我必须对表进行反规范化,并创建一个副本,我们称之为UserPrincipalByUsername,它与第一个相同,只是与主键不同,现在,我可以使用以下接口作为存储库吗?同时将用户保存到两个表或从两个表中删除用户以保持数据一致性如何

public interface UserRepository extends CassandraRepository<UserPrincipal> 
{
   @Query("SELECT * FROM UserPrincipal WHERE email = ?0")
   UserPrincipal findByEmailAddress(String emailAddress);   

   @Query("SELECT * FROM UserPrincipalByUsername WHERE username= ?0")
   UserPrincipal findByUsername(String username);   
}
public interface UserRepository扩展了CassandraRepository
{
@查询(“从UserPrincipal中选择*,其中电子邮件=?0”)
UserPrincipal findByEmailAddress(字符串emailAddress);
@查询(“从UserPrincipalByUsername中选择*,其中用户名=?0”)
UserPrincipal findByUsername(字符串用户名);
}
需要注意的是,可以使用两个单独的接口单独处理每个表,但我仍然需要一些逻辑来维护某个点的一致性


我正在使用Cassandra 2.0.11、CQL spec 3.1.1、Spring data Cassandra 1.3.2和Spring boot 1.3.1

我发现解决这个问题的唯一过程是,如问题中所述,使用两个单独的接口来单独处理每个表,我添加了一个包装器类,使用它们来使用一个调用
保存
,但这并不能保证始终保持一致性(例如,在服务器/系统出现故障的情况下),但在我的特定应用程序中这是可以的。

UserPrincipal
UserPrincipalByUsername
是不同的表吗?使用不同的主键?您可以在
UserPrincipal
上创建二级索引以使用名称进行查询,而不是对其进行反规范化?实际上,您不能对高基数列使用cassandra索引,这是用户名的情况。使用
@query
将满足您的需要。保持两个表同步是您的工作。您可以使用原子批处理操作,但这些操作非常昂贵,因为它们会使您的Cassandra节点繁忙。如何处理一些超出范围的批处理作业,并跟踪清理/添加丢失的数据?嗨@Hasson,你能告诉我们你是如何解决的吗?@Baga请查看我的答案