gpt4 book ai didi

mongodb - 防止 Mongo 的 Spring Data 将 id 转换为 ObjectId

转载 作者:IT老高 更新时间:2023-10-28 12:30:59 25 4
gpt4 key购买 nike

我在现有数据库上使用 Spring Data for Mongo。之前的应用程序使用纯字符串作为 id 而不是 ObjectId。

我的问题是 Spring Data 坚持将字符串转换为 ObjectId,这使得所有按 id 的查询都失败了。

例如,当我执行repository.findOne('')时,执行的查询是{ "_id": { "$oid": "50cf9f34458cf91108ceb2b4"}} 什么时候应该是 { "_id": "50cf9f34458cf91108ceb2b4"}

有没有办法避免 Spring Data 将字符串 id 转换为 ObjectId?

谢谢!

迭戈

最佳答案

我终于找到了解决方案。可能不是最佳选择,但有效。

我所做的是将转换器从 String 删除为 MongoTemplate 通过 QueryMapper 使用的 ObjectId。这样,我创建了以下 Mongo 转换器:

public class CustomMongoConverter extends MappingMongoConverter {
public CustomMongoConverter(MongoDbFactory mongoDbFactory, MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext) {
super(mongoDbFactory, mappingContext);
conversionService.addConverter(new Converter<String, ObjectId>() {
@Override
public ObjectId convert(String source) {
throw new RuntimeException();
}
});
}
}

然后,我将转换器的实现传递给 MongoTemplate:

<bean id="mongoConverter" class="com.abcompany.model.repositories.utils.CustomMongoConverter">
<constructor-arg ref="mongoDbFactory"/>
<constructor-arg>
<bean class="org.springframework.data.mongodb.core.mapping.MongoMappingContext"/>
</constructor-arg>
</bean>

<bean class="org.springframework.data.mongodb.core.MongoTemplate" id="mongoTemplate">
<constructor-arg ref="mongoDbFactory"/>
<constructor-arg ref="mongoConverter"/>
</bean>

这样,当尝试从 String 转换为 ObjectId 时,它会抛出异常并且它不会这样做。请注意,您可能只需从 conversionService 中删除转换器。

关于mongodb - 防止 Mongo 的 Spring Data 将 id 转换为 ObjectId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14329175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com