spring-data-mongodb在为对象补水时如何处理构造函数?

Kar*_*ahl 6 java spring mongodb spring-data spring-data-mongodb

我已阅读http://static.springsource.org/spring-data/data-mongo/docs/1.1.0.RELEASE/reference/html/#mapping-chapter但无法找到以下基本弹簧数据的答案 - 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道Test(String str1)将使用str1MongoDB文档的顶级字段中找到的值调用构造函数.我假设这个构造函数相当于@PersistenceConstructor显式声明.

但是str2, date3在这种情况下,字段会发生什么?是否仍然会初始化所有不属于构造函数的字段,或者str2, date3由于仅使用了PeristenceConstructor而导致值丢失str1

最后,这会以什么顺序发生?将由date3构造函数设置,然后被先前持久化的字段覆盖,反之亦然?

Oli*_*ohm 10

人口过程是双重的,并且在某种程度上是正交的.大多数情况下,您已经说明了正确的行为.调用构造函数以创建对象实例.从DBObject读取中检索参数值,并且可能导致递归创建对象,以防您将复杂对象移植到需要从嵌套中解组的构造函数中DBObject.

下一步是填充持久字段.您的情况与默认构造函数的唯一区别在于我们记住您传递给构造函数的字段值,并且不会重新填充它们.

如果实现对象的源文档包含值,则date示例中的属性仍将在构造函数初始化后设置.date