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

dga*_*ola 5 mongodb spring-data-mongodb

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

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

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

有没有一种方法可以避免Spring Data将字符串ID转换为ObjectId?

谢谢!

地亚哥

dga*_*ola 1

我终于找到了解决这个问题的办法。可能不是最好的选择,但有效。

我所做的是将转换器从 删除StringObjectId使用MongoTemplatethrough QueryMapper。这样,我创建了以下 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();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我将转换器的实现传递给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>
Run Code Online (Sandbox Code Playgroud)

这样,当尝试从 String 转换为 ObjectId 时,它会抛出异常,但不会执行此操作。请注意,您可能只需从 中删除转换器即可conversionService