2016-06-28 3 views
1

Документ в коллекции productChanges выглядит следующим образом.Результат запроса результата mongotemplate Spring с субдокументами

{ 
    "_id" : NumberLong(9780876590034), 
    "isbn" : NumberLong(9780876590034), 
    "updDtime" : ISODate("2016-06-08T14:02:29.044Z"), 
    "Audit" : { 
     "LastProcCntrlNo" : 100192211, 
     "UpdDtime" : ISODate("2016-06-08T14:02:29.044Z"), 
     "AddDtime" : ISODate("2016-06-08T14:02:29.044Z") 
    } 
} 

У меня есть класс ProductChanges.java

public class ProductChanges { 
    Long isbn; 
    Date updDtime; 
    Audit audit; 

    // getters & setters 
} 

Я использую mongoTemplate запросить базу данных, но я не могу получить Audit объекта заселен.

// query the DB 
List<ProductChanges> productChanges = mongoTemplate.find(query, ProductChanges.class, "productChanges"); 

Это должно быть просто. Нужно ли комментировать объект Audit? Я пропустил что-то тривиальное?

Данные весны Данные MongoDB не помогли найти ответ на эту проблему.

+0

«Я не могу получить объект аудита заселенным»: описать, что происходит. Любое сообщение об ошибке? Является ли список простым пустым, когда этого не должно быть? –

+0

@ antoine-sac Нет сообщения об ошибке. 'productChanges' заполняется записями, но' audit' всегда равно null. – ravindrab

ответ

1

Основываясь на Spring Data MongoDB documentation:

короткое имя класса Java отображается имя коллекции следующим образом. Класс com.bigbank.SavingsAccount соответствует savingsAccount название коллекции.

Поля объекта используются для преобразования в и из полей в документе . Открытые свойства JavaBean не используются.

Поскольку поле вашего поддокументе называется Audit и имя Java поля audit, Spring Data не может заполнить audit поля, как вы ожидали.

Для того, чтобы исправить эту проблему, следует либо переименовать поле в Audit:

public class ProductChanges { 
    Long isbn; 
    Date updDtime; 
    Audit Audit; // renamed to Audit from audit 

    // getters & setters  
} 

Или используйте @Field аннотацию:

public class ProductChanges { 
    Long isbn; 
    Date updDtime; 
    @Field("Audit") Audit audit; 

    // getters & setters 
} 

Вы можете прочитать больше о аннотациях для отображения here. И совет, попробуйте использовать согласованное соглашение об именах.

Смежные вопросы