私は独自の書き込みカスタムコンバータを登録して、デフォルトのID値を変更しようとしています。 しかしそれは実際には決して呼び出されません。 はここにここに私のカスタムコンバータSpringがmongoカスタムコンバータを使用していません
public class EventKeyConverter implements Converter<Event,DBObject> {
@Override
public DBObject convert(Event object) {
DBObject dbObject = DBObjectTransformer.toDBObject(object);
dbObject.put("_id", KeyGenerator.getRandomKey());
return dbObject;
}
}
は、私は、このコンバータが呼ばれることは決してありませんいくつかのオブジェクトを保存していたとき、私は顧客のコンバータ
@Override
@Bean
public CustomConversions customConversions() {
List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
converters.add(new EventKeyConverter());
return new CustomConversions(converters);
}
@Override
@Bean
public MappingMongoConverter mappingMongoConverter() throws Exception {
MappingMongoConverter converter = new MappingMongoConverter(
eventsMongoDbFactory(), mongoMappingContext());
converter.setCustomConversions(customConversions());
return converter;
}
public @Bean
MongoTemplate eventsMongoTemplate() throws Exception {
final MongoTemplate template = new MongoTemplate(
eventsMongoDbFactory(), mappingMongoConverter());
template.setWriteResultChecking(WriteResultChecking.EXCEPTION);
return template;
}
を登録しなかった場所です。
編集1: 私はすべてのリポジトリでいくつかのカスタムID(UUID +ランダムキー)にデフォルトのオブジェクトIDを変更する必要があります。それで、なぜ私はmongoコンバータを使用しようとしました。
編集2: 問題が見つかりました。 customConversion()を含むクラスの@Configurationを@Componentに変更しても問題ありません。しかし、まだ何が起こっているのだろうか?
実際にオブジェクトを保存する方法を教えてください。つまり、POJOを実際のBSONに変換してDBに保存する必要があるのはなぜですか? – user
すべてのリポジトリでデフォルトのオブジェクトIDをカスタムId(UUID +ランダムキー)に変更する必要があります。それで、なぜ私はmongoコンバータを使用しようとしました。 –
Rajith、mongodbでは、_idフィールドを更新することはできません。カスタム_idで新しいオブジェクトを追加する場合は、必要なフィールドに@Idアノテーションを指定し、オブジェクトを手動で挿入するときに_idを手動で設定する必要があります。 – user