sql >> Base de Datos >  >> NoSQL >> MongoDB

Evite Spring Data para que Mongo convierta ids a ObjectId

Finalmente encontré una solución para esto. Probablemente no sea la mejor opción, pero funciona.

Lo que hice fue eliminar el convertidor de String a ObjectId que MongoTemplate utiliza a través de QueryMapper . De esta manera, creé el siguiente convertidor de 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();
            }
        });
    }
}

Y luego, pasé esa implementación del convertidor a 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>

De esta manera, al intentar convertir de String a ObjectId, arroja una excepción y no lo hace. Tenga en cuenta que probablemente pueda eliminar el convertidor de conversionService .