Как именно spring-data-mongodb обрабатывает конструкторы при регидратации объектов?
Я прочитал http://static.springsource.org/spring-data/data-mongo/docs/1.1.0.RELEASE/reference/html/ но не могу найти ответ на следующие основные Spring-data- вопрос отображения объекта mongodb:
Если я загружаю экземпляр следующего класса из MongoDB:
public class Test {
private String str1;
private String str2;
private Date date3;
public Test(String str1) {
this.str1 = str1;
this.date3=new Date();
}
}
Я так понимаю что конструктор Test(String str1)
будет вызываться со значением, найденным в поле верхнего уровня str1
документа MongoDB. Я предполагаю, что этот конструктор эквивалентен объявлению @PersistenceConstructor
в явном виде.
Но что происходит с полями str2, date3
в этом случае? Будут ли инициализированы все поля, которые не являются частью конструктора, или str2, date3
значения будут потеряны, так как PeristenceConstructor использует только str1
был найден?
И, наконец, в каком порядке это произойдет? Будет date3
быть установлен конструктором, затем перезаписан ранее сохраненным полем, или наоборот?
1 ответ
Популяционный процесс является двояким и в некоторой степени ортогональным. В основном вы уже указали правильное поведение. Конструктор вызывается для создания экземпляра объекта. Значения параметров извлекаются из DBObject
читать и может вызвать рекурсивное создание объектов в случае, если вы передаете сложные объекты в конструктор, который необходимо разобрать из вложенного DBObject
,
Следующим шагом будет заполнение ваших постоянных полей. Единственное отличие в вашем случае от случая с конструктором по умолчанию состоит в том, что мы запоминаем значения полей, которые вы передали в конструктор, и не заполняем их заново.
date
Свойство в вашем примере все равно будет установлено после инициализации в конструкторе, если исходный документ, из которого материализован объект, содержит значение для date
,