Как сопоставить объект Java с несколькими коллекциями MongoDB в данных Spring? - PullRequest
0 голосов
/ 11 сентября 2018

В настоящее время мы ищем решение для сохранения следующей сущности User в нескольких коллекциях MongoDB одновременно (т. Е. db_users и db_users_legacy).Обе коллекции находятся в одной базе данных.

Пожалуйста, не спрашивайте меня, почему мне нужно сохранить в двух коллекциях.Это бизнес-требование.

@Document(collection = "db_users")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    @Id
    private String id;
    private String name;
    private String website;
    private String name;
    private String email;

}

И моя конфигурация приложения SpringBoot выглядит так:

@Configuration
public class ApplicationConfig {

    @Bean
    public MongoTemplate mongoTemplate(MongoDbFactory factory){
        MongoTemplate template = new MongoTemplate(factory);
        template.setWriteConcern(WriteConcern.ACKNOWLEDGED);
        retu,rn template;
    }

}

В настоящее время мой репозиторий выглядит так.И сохранение работает отлично.Как я могу создать этот документ в двух разных коллекциях?

@Repository
public class UserRepositoryImpl implements UserRepository {

    private MongoTemplate mongoTemplate;

    public UserRepositoryImpl(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    @Override
    public void save(User user) {
        mongoTemplate.save(user);
    }

}

Может кто-нибудь предложить лучший вариант решения этой проблемы, пожалуйста?

1 Ответ

0 голосов
/ 11 сентября 2018

Я предлагаю использовать MongoTemplate, другой перегруженный метод сохранения .

@Override
public void save(User user) {
    mongoTemplate.save(user, "db_users");
    mongoTemplate.save(user, "db_users_legacy");
}

Это можно использовать для сохранения одного и того же объекта в нескольких коллекциях.Из документов

Вы можете настроить это, указав другое имя коллекции с помощью аннотации @Document.Вы также можете переопределить имя коллекции, указав свое собственное имя коллекции в качестве последнего параметра для вызовов выбранного метода MongoTemplate.

Так что не имеет значения имя коллекции, специально предоставленное в @Document, вывсегда можете переопределить его, используя MongoTemplate.

...