Как именно 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,

Другие вопросы по тегам