MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Spring Data for Mongo daran hindern, IDs in ObjectId zu konvertieren

Ich habe endlich eine Lösung dafür gefunden. Wahrscheinlich nicht die beste Option, aber funktioniert.

Ich habe den Konverter aus String entfernt zu ObjectId dieses MongoTemplate verwendet durch QueryMapper . Auf diese Weise habe ich den folgenden Mongo-Konverter erstellt:

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

Und dann habe ich diese Implementierung des Konverters an MongoTemplate übergeben :

<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>

Auf diese Weise wird beim Versuch, von String in ObjectId zu konvertieren, eine Ausnahme ausgelöst und nicht ausgeführt. Bitte beachten Sie, dass Sie den Konverter wahrscheinlich einfach aus conversionService entfernen können .