MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Impedisci a Spring Data per Mongo di convertire gli ID in ObjectId

Alla fine ho trovato una soluzione per questo. Probabilmente non è l'opzione migliore, ma funziona.

Quello che ho fatto è stato rimuovere il convertitore da String a ObjectId quel MongoTemplate utilizza tramite QueryMapper . In questo modo, ho creato il seguente convertitore 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 poi, ho passato l'implementazione del convertitore 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>

In questo modo, quando si tenta di convertire da String a ObjectId, genera un'eccezione e non lo fa. Tieni presente che probabilmente puoi semplicemente rimuovere il convertitore da conversionService .