7

既存のデータベースで Mongo の Spring Data を使用しています。前のアプリケーションでは、ID に ObjectId の代わりにプレーン文字列を使用していました。

私の問題は、Spring Data が文字列を ObjectId に変換することを主張しているため、ID によるすべてのクエリが失敗することです。

たとえば、私が実行するときrepository.findOne('')、実行されるクエリは{ "_id" : { "$oid" : "50cf9f34458cf91108ceb2b4"}}それがあるべきときです{ "_id" : "50cf9f34458cf91108ceb2b4" }

Spring Data が文字列 ID を ObjectId に変換するのを回避する方法はありますか?

ありがとう!

ディエゴ

4

5 に答える 5

2

私は最終的にこれに対する解決策を見つけました。おそらく最良の選択肢ではありませんが、機能します。

私がしたStringことObjectIdMongoTemplate、からコンバーターを削除することでしたQueryMapper。このようにして、次の 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();
            }
        });
    }
}

そして、コンバーターの実装を次のように渡しました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>

このように、String から ObjectId に変換しようとすると、例外がスローされ、変換されません。からコンバーターを削除できる可能性があることに注意してくださいconversionService

于 2013-01-15T03:10:47.803 に答える