猿问

如何在 Spring Data 中将 Java 实体映射到多个 MongoDB 集合?

目前,我们正在寻找一种解决方案,将以下User实体同时保存到多个 MongoDB 集合中(即db_users和 on 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);

    }


}

任何人都可以建议处理这个问题的最佳选择吗?


喵喔喔
浏览 367回答 1
1回答

慕斯709654

我建议使用MongoTemplate另一个重载的保存方法。@Overridepublic void save(User user) {    mongoTemplate.save(user, "db_users");    mongoTemplate.save(user, "db_users_legacy");}这可用于将同一对象保存到多个集合。从文档,您可以通过使用 @Document 注释提供不同的集合名称来自定义它。您还可以通过提供您自己的集合名称作为所选 MongoTemplate 方法调用的最后一个参数来覆盖集合名称。因此, 中专门提供的集合名称无关紧要@Document,您始终可以使用MongoTemplate.
随时随地看视频慕课网APP

相关分类

Java
我要回答