2013-02-18 4 views
6

Ho cercato di registrare i miei convertitori personalizzati di scrittura per modificare il valore ID predefinito. Ma in realtà non chiama mai. Qui è la mia ordinazione ConverterSpring not using mongo custom converters

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

}

qui è il posto che si è registrato convertitore cliente

@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; 
} 

Quando sto risparmiando alcuni oggetti di questo convertitore non viene mai chiamato.


Edit 1: ho bisogno di cambiare l'oggetto predefinito Id in qualche Id personalizzato (UUID + chiave casuale) in tutti i repository. Questo è il motivo per cui ho provato ad usare il convertitore mongo.

Modifica 2: Appena trovato il problema. Cambia @Configuration in @Component nella classe che contiene customConversion() e funziona correttamente. Ma ti stai ancora chiedendo cosa è successo qui?

+0

Potresti mostrare come effettivamente salvi gli oggetti? Voglio dire, perché dovresti convertire un POJO in BSON effettivo per salvarlo in DB? – user

+0

Devo cambiare l'ID oggetto predefinito in qualche ID personalizzato (UUID + chiave casuale) in tutti i repository. Questo è il motivo per cui ho provato ad usare il convertitore mongo. –

+0

Rajith, in mongodb non sei autorizzato ad aggiornare i campi _id. Se desideri aggiungere nuovi oggetti con un _id personalizzato, devi fornire il campo necessario con l'annotazione @Id e quando inserisci un oggetto imposta manualmente _id. – user

risposta

2

@Configuration definisce un frammento di contesto Spring che contiene metodi che se annotati con @Bean restituiscono nuovi bean e li inseriscono nel contesto.

@Component è un modo per dire "questo Pojo è un fagiolo primavera". È quindi necessaria un'annotazione @ComponentScan o un equivalente XML per analizzare i pacchetti per i bean annotati @Component.

Quindi nel tuo caso, hai creato il convertitore bene, ma non è stato registrato come bean Spring fino a quando non hai aggiunto @Component, quindi inizialmente non ha funzionato.