sql >> Databáze >  >> NoSQL >> MongoDB

Zabraňte Spring Data pro Mongo převést ID na ObjectId

Konečně jsem na to našel řešení. Pravděpodobně to není nejlepší možnost, ale funguje.

Co jsem udělal, bylo odstranění převodníku z String na ObjectId že MongoTemplate používá prostřednictvím QueryMapper . Tímto způsobem jsem vytvořil následující konvertor 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();
            }
        });
    }
}

A pak jsem tuto implementaci převodníku předal 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>

Tímto způsobem při pokusu o převod z řetězce na ObjectId vyvolá výjimku a neudělá to. Vezměte prosím na vědomí, že pravděpodobně stačí odebrat převodník z conversionService .



  1. pymongo získává E11000 duplicitní klíčový chybový index Chyba pymongo

  2. Selhání aktualizace vnořeného dokumentu Mongoose?

  3. MongoDB $set neaktualizuje záznam

  4. Node MongoDb { err:'vypršel časový limit připojení k [127.0.0.1:27017]' }