spring-data-mongodb 在解除冻结对象时究竟如何处理构造函数



我已经阅读了 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();
    }
}

我知道构造函数Test(String str1)将使用MongoDB文档的顶级字段str1中找到的值进行调用。我认为这个构造函数等效于显式声明@PersistenceConstructor

但是在这种情况下,str2, date3的字段会发生什么?是否仍将初始化不属于构造函数的所有字段,或者自找到仅使用 str1 的 PeristenceConstructor 以来,str2, date3值是否会丢失?

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

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

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

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

最新更新