2013-02-18 7 views
6

私は独自の書き込みカスタムコンバータを登録して、デフォルトの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に変更しても問題ありません。しかし、まだ何が起こっているのだろうか?

+0

実際にオブジェクトを保存する方法を教えてください。つまり、POJOを実際のBSONに変換してDBに保存する必要があるのはなぜですか? – user

+0

すべてのリポジトリでデフォルトのオブジェクトIDをカスタムId(UUID +ランダムキー)に変更する必要があります。それで、なぜ私はmongoコンバータを使用しようとしました。 –

+0

Rajith、mongodbでは、_idフィールドを更新することはできません。カスタム_idで新しいオブジェクトを追加する場合は、必要なフィールドに@Idアノテーションを指定し、オブジェクトを手動で挿入するときに_idを手動で設定する必要があります。 – user

答えて

2

@Configurationは、@Beanで注釈を付けると新しい豆を返してコンテキストに入れるメソッドを含むSpringコンテキストフラグメントを定義します。

@Componentは、「このPojoはSpring Beanです」という表現です。 @Component注釈付きBeanのパッケージをスキャンするには、@ComponentScanアノテーションまたはXML同等のものが必要です。

あなたのケースでは、コンバーターをうまく作成しましたが、@Componentを追加するまでSpring Beanとして登録されていないため、最初は機能しませんでした。

関連する問題