Java Spring boot webflux如何同时保存更新和删除多个Monos

Java Spring boot webflux如何同时保存更新和删除多个Monos,java,reactive-programming,spring-webflux,spring-data-cassandra,Java,Reactive Programming,Spring Webflux,Spring Data Cassandra,我已经搜索过了,但还没有得到任何具体的答案。我使用Cassandra作为我的数据库,我有三个具有相同属性的表。如何同时保存、更新和删除这三个表上的相同数据 用户表 Create Table user ( userid bigint, username text, password text, name text, email text, phone text, birthday text, biography text, PRIMARY KEY (userid

我已经搜索过了,但还没有得到任何具体的答案。我使用Cassandra作为我的数据库,我有三个具有相同属性的表。如何同时保存、更新和删除这三个表上的相同数据

用户表

Create Table user (
  userid bigint,
  username text,
  password text,
  name text,
  email text,
  phone text,
  birthday text,
  biography text,
  PRIMARY KEY (userid)
)
用户名表

Create Table user (
  username text,
  userid bigint,
  password text,
  name text,
  email text,
  phone text,
  birthday text,
  biography text,
  PRIMARY KEY (username)
)
用户电子邮件表

Create Table user (
  email text,
  username text,
  userid bigint,
  password text,
  name text,
  phone text,
  birthday text,
  biography text,
  PRIMARY KEY (email)
)

这些是存储库

public interface UserRepository extends ReactiveCassandraRepository<User, Long> {
}

public interface UserUsernameRepository extends ReactiveCassandraRepository<UserUsername, String> {
}

public interface UserEmailRepository extends ReactiveCassandraRepository<UserEmail, String> {
}
public interface UserRepository扩展了ReactiveCassandraRepository{
}
公共接口UserName存储库扩展了ReactiveCassandraRepository{
}
公共接口UserEmailRepository扩展了ReactiveCassandraRepository{
}
我可以单独保存它们,但不能同时保存

public Mono<ServerResponse> createUser(ServerRequest request) {
  Mono<User> user = request.bodyToMono(User.class);
  return ServerResponse.ok().build(userRepository.saveUser(user));
}
公共Mono createUser(服务器请求){ Mono user=request.bodyToMono(user.class); 返回ServerResponse.ok().build(userRepository.saveUser(user)); } 注册POJO(JSON有效负载)

公共类注册{
私有字符串名称;
私有字符串用户名;
私人字符串电子邮件;
私有字符串密码;
}
公共Mono post(服务器请求){
Mono signUp=request.bodytomino(signUp.class);
最终UUID id=UUID.randomUUID();
已创建的返回(UriComponentsBuilder.fromPath(“user/”+id).build().toUri())
.contentType(应用程序_JSON)
.身体(
来自出版商(
signUp.map(u->newuser(u,id)).flatMap(userManager::saveUser),User.class)
signUp.map(u->newuserusername(u,id)).flatMap(userManager::saveUsername),User.class)
signUp.map(u->newuseremail(u,id)).flatMap(userManager::saveEmail),User.class)
);
}
我需要帮助来解决这个问题。删除和更新也是如此
公共Mono删除(服务器请求){
字符串id=request.pathVariable(“id”);
返回人事经理
.findById(id)
.flatMap(u->noContent().build(userManager.deleteUser(u)))
//用户被删除
//如何删除UserUsername
//同时删除用户电子邮件
} 

您需要映射用户用户名和用户电子邮件,如下所示:

Create Table user (
  username text,
  userid bigint,
  password text,
  name text,
  email text,
  phone text,
  birthday text,
  biography text,
  PRIMARY KEY (username)
)

Create Table userUsername (
  username text,
  userid bigint,
  usernameid bigint,
  password text,
  name text,
  email text,
  phone text,
  birthday text,
  biography text,
  PRIMARY KEY (userid, usernameid)
)

Create Table userEmail (
  email text,
  emailid bigint,
  username text,
  userid bigint,
  password text,
  name text,
  phone text,
  birthday text,
  biography text,
  PRIMARY KEY (userid, emailid)
)

为什么要复制数据库中的数据?对于像Cassandra这样的分布式数据库,数据复制是必要的。现在磁盘更便宜了。为了改进Cassandra reads,我们需要复制数据,以便在出现某些故障时确保数据的可用性。我认为我的模型是正确的,对于你的模型,我无法通过根据用户ID、用户名和电子邮件查找用户来解决我的需要。
Create Table user (
  username text,
  userid bigint,
  password text,
  name text,
  email text,
  phone text,
  birthday text,
  biography text,
  PRIMARY KEY (username)
)

Create Table userUsername (
  username text,
  userid bigint,
  usernameid bigint,
  password text,
  name text,
  email text,
  phone text,
  birthday text,
  biography text,
  PRIMARY KEY (userid, usernameid)
)

Create Table userEmail (
  email text,
  emailid bigint,
  username text,
  userid bigint,
  password text,
  name text,
  phone text,
  birthday text,
  biography text,
  PRIMARY KEY (userid, emailid)
)