9

我已阅读http://static.springsource.org/spring-data/data-mongo/docs/1.1.0.RELEASE/reference/html/#mapping-chapter但找不到以下基本 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();
    }
}

我知道将使用 MongoDB 文档Test(String str1)顶级字段中的值调用构造函数。str1我假设这个构造函数等同于@PersistenceConstructor显式声明。

但是str2, date3在这种情况下,这些字段会发生什么?不属于构造函数的所有字段是否仍会被初始化,还是会str2, date3因为找到仅使用的 PeristenceConstructor 而丢失str1

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

4

1 回答 1

13

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

下一步是填充您的持久字段。您的情况与使用默认构造函数的情况的唯一区别是我们记住您传递给构造函数的字段值并且不会重新填充这些值。

如果date物化对象源文档包含date.

于 2013-01-31T12:00:46.430 回答