Пытаясь обернуть голову вокруг модели реактора и трубопровода, я хочу вставить в монго пару Users
, затем для каждого пользователя я хотел бы вставить несколько (10) Offers
Моя текущая реализация включает в себя вставку 3 пользователей в базу данных, блокирование и вставку предложений (только для 1 пользователя) несколько назад, например так:
Flux.just(u1, u2, u3).flatMap(u -> reactiveMongoTemplate.insert(u)).blockLast();
Arrays.asList(u1, u2, u3).forEach(user -> {
IntStream.range(0,10).forEach(i -> reactiveMongoTemplate.insert(new Offer(user)).subscribe());
});
Первая строка работает нормально, но я получаю следующееисключение
java.lang.IllegalStateException: состояние должно быть: open
Конечно, я могу обойти это, вставляя для каждого пользователя отдельно, я не знаю, почему этоВозникла исключительная ситуация, и я также благодарен за ответ по этому вопросу
Мой основной вопрос в том, как написать его наиболее оперативно, если мне нужно заблокировать его для заполнения сущности Id
после вставки или есть лучший способ?
Точная реализация User
и Offer
на самом деле не имеет значения, это могут быть любые простые записи, но здесь они
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "users")
public class User extends BaseEntity {
private String name;
}
...
@Data
@Document(collection = "offers")
public class Offer extends BaseEntity {
private String title;
@JsonSerialize(using = ToStringSerializer.class)
private ObjectId user;
public Offer(){
this.title = "some title " + new Random().nextInt(10);
}
public Offer(User user){
this();
this.user = new ObjectId(user.getId());
}
public void setUser(String userId) {
this.user = new ObjectId(userId);
}
}
reactiveMongoTemplate
от spring-boot-starter-data-mongodb-реактивный @EnableReactiveMongoRepositories
Thx