如何将 Java 实体映射到 Spring 数据中的多个 MongoDB 集合?
How to Map a Java Entity to Multiple MongoDB Collections in Spring Data?
目前,我们正在寻找将以下 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);
}
}
请问有谁能提出解决这个问题的最佳方案吗?
我建议使用 MongoTemplate
的另一个 overloaded save method。
@Override
public void save(User user) {
mongoTemplate.save(user, "db_users");
mongoTemplate.save(user, "db_users_legacy");
}
这可用于将同一对象保存到多个集合中。
来自文档,
You can customize this by providing a different collection name using the @Document annotation. You can also override the collection name by providing your own collection name as the last parameter for the selected MongoTemplate method calls.
因此 @Document
中具体提供的集合名称并不重要,您始终可以使用 MongoTemplate
.
覆盖它
目前,我们正在寻找将以下 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);
}
}
请问有谁能提出解决这个问题的最佳方案吗?
我建议使用 MongoTemplate
的另一个 overloaded save method。
@Override
public void save(User user) {
mongoTemplate.save(user, "db_users");
mongoTemplate.save(user, "db_users_legacy");
}
这可用于将同一对象保存到多个集合中。 来自文档,
You can customize this by providing a different collection name using the @Document annotation. You can also override the collection name by providing your own collection name as the last parameter for the selected MongoTemplate method calls.
因此 @Document
中具体提供的集合名称并不重要,您始终可以使用 MongoTemplate
.