MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Impedir que o Spring Data for Mongo converta ids em ObjectId


Finalmente encontrei uma solução para isso. Provavelmente não é a melhor opção, mas funciona.

O que fiz foi remover o conversor de String para ObjectId que MongoTemplate usa através de QueryMapper . Dessa forma, criei o seguinte conversor do 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();
            }
        });
    }
}

E então, passei essa implementação do conversor para 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>

Dessa forma, ao tentar converter de String para ObjectId, ele lança uma exceção e não o faz. Observe que você provavelmente pode remover o conversor de conversionService .