Я оцениваю MongoDB и Spring Data MongoDB в весеннем загрузочном приложении для одного из наших будущих проектов. У меня есть простой POJO, который будет сохранен в MongoDB.
@Document(collection = "customers")
public class CustomerDoc{
@org.springframework.data.annotation.Id
private String Id;
private String firstName;
private String lastName;
private MonetaryAmount amount;
public CustomerDoc(String firstName, String lastName, MonetaryAmount amount){
this.firstName = firstName;
this.lastName = lastName;
this.amount = amount;
}
}
Конфигурация Spring
@Bean
public MongoDbFactory mongoDbFactory() throws Exception {
MongoClient mongoClient = new MongoClient("localhost", 27017);
return new SimpleMongoDbFactory(mongoClient, mongoDbName);
}
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory(), mongoConverter());
}
@Bean
public MappingMongoConverter mongoConverter() throws Exception {
MongoMappingContext mappingContext = new MongoMappingContext();
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mappingContext);
mongoConverter.setMapKeyDotReplacement("\\:");
return mongoConverter;
}
В конфигурации я должен установить ключ замены, потому что без него я получаю исключение:
org.springframework.data.mapping.model.MappingException: ключ карты java.lang.Class содержит точки, но замена не настроена! Прежде всего убедитесь, что ключи карты не содержат точек, или настройте подходящую замену!
Это происходит из-за объекта MonetaryAmount
в классе Customer
Репозиторий клиента:
public interface CustomerDocRepository extends MongoRepository<CustomerDoc, String>{
public List<CustomerDoc> findByFirstName();
}
Теперь, если я попытаюсь сохранить объект клиента, я получу это исключение:
Я использую драйвер mongo 3.2.2 Spring data MongoDB 1.9.1
Любая помощь могла бы быть полезна
Трассировка стека появляется, когда вы пытаетесь преобразовать объект с полем типа java.lang.Class. Пожалуйста, опубликуйте источник для класса MonetaryAmount. Кроме того, тот факт, что вам нужно установить замену точки, связан с тем, что что-то имеет ключевое значение java.lang.Class, как если бы вы вводили в консоль Mongo что-то вроде: db.someCollection.insert({java.lang .Класс: бла})