2017-11-09 5 views
0

私はPOJOを持っています。私はmongoDBにspringデータmongodbを使っていくつかのフィールドを追加して保存します。このために、私はカスタムコンバータを作成しました。しかし、このカスタムカスタムコンバーターは呼び出さず、カスタムコンバーターごとに保存しません。ここで私にSpringデータmongoカスタムコンバータが呼び出し中でなく、保存していません

を助けてくださいMongoDbConfigurationクラス:ここ

@Configuration 
@EnableMongoRepositories(basePackages = { "com.db.sample" }) 
@ComponentScan(basePackages = "com.db.sample") 
public class MongoDbConfiguration extends AbstractMongoConfiguration { 

    @Override 
    protected String getDatabaseName() { 
     return "test"; 
    } 

    @Override 
    public Mongo mongo() throws Exception { 
     return new MongoClient("127.0.0.1", 27017); 
    } 

    @Override 
    public CustomConversions customConversions() { 
     List<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>(); 
     converterList.add(new SampleEventWriterConverter()); 
     return new CustomConversions(converterList); 
    } 

    @Override 
    public String getMappingBasePackage() { 
     return "com.db.sample"; 
    } 

    @Bean 
    public MongoTemplate mongoTemplate() throws Exception { 
     MongoTemplate mongoTemplate = new MongoTemplate(mongo(), "test"); 
     MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter(); 
     mongoMapping.setCustomConversions(customConversions()); 
     mongoMapping.afterPropertiesSet(); 
     return mongoTemplate; 
    } 
} 

SampleEventWriterConverterクラス:

@Component 
public class SampleEventWriterConverter implements Converter<SampleEvent, Document> { 
    @Override 
    public Document convert(SampleEvent event) { 
     Document doc = new Document(); 
     doc.put("_id", event.getId()); 
     // … 
     doc.put("sample", "test"); 
     for (Map.Entry<String, Object> entry : event.getFields().entrySet()) { 
      doc.put(entry.getKey(), entry.getValue()); 
     } 
     return doc; 
    } 
} 

ここにリポジトリクラス:ここ

@Repository 
public interface SampleEventRepository extends MongoRepository<SampleEvent, ObjectId> { 

} 

POJOクラス:

@Document(collection = "sample_event") 
public class SampleEvent implements Serializable{ 

    @Id 
    private ObjectId id; 

    private Map<String, Object> fields = new HashMap<String, Object>(); 

    public ObjectId getId() { 
     return id; 
    } 

    public void setId(ObjectId id) { 
     this.id = id; 
    } 

    @JsonAnyGetter 
    public Map<String, Object> any() { 
     return fields; 
    } 

    @JsonAnySetter 
    public void set(String name, Object value) { 
     fields.put(name, value); 
    } 
    public void setFields(Map<String, Object> obj) { 
     fields = obj; 
    } 

    public Map<String, Object> getFields() { 
     return fields; 
    } 
} 

私のメインクラス:これは以下のようにDBObjectをSampleEvent &にSampleEvent &文書からのコンバーターの種類を変更した後に取り組んでいる

@Autowired 
    private SampleEventRepository sampleEventRepository; 
    SampleEvent sampleEvent = new SampleEvent(); 
    sampleEvent.setUniqueId("1.1.1.1"); 
    sampleEvent.setFields(mapObj); 
    ... 
    sampleEventRepository.save(sampleEvent); 

答えて

1

@Component 
public class SampleEventWriterConverter implements Converter<SampleEvent, DBObject> { 
    @Override 
    public Document convert(SampleEvent event) { 
     DBObject doc = new BasicDBObject(); 
     doc.put("_id", event.getId()); 
     // … 
     doc.put("sample", "test"); 
     for (Map.Entry<String, Object> entry : event.getFields().entrySet()) { 
      doc.put(entry.getKey(), entry.getValue()); 
     } 
     return doc; 
    } 
} 
(SampleEventWriterConverterクラス用)
関連する問題