MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Empêcher Spring Data for Mongo de convertir les identifiants en ObjectId

J'ai finalement trouvé une solution pour cela. Probablement pas la meilleure option, mais fonctionne.

Ce que j'ai fait, c'est supprimer le convertisseur de String à ObjectId que MongoTemplate utilise via QueryMapper . De cette façon, j'ai créé le convertisseur Mongo suivant :

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();
            }
        });
    }
}

Et puis, j'ai passé cette implémentation du convertisseur à 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 cette façon, lors de la tentative de conversion de String en ObjectId, il lève une exception et ne le fait pas. Veuillez noter que vous pouvez probablement simplement supprimer le convertisseur de conversionService .