【问题标题】:How exactly does spring-data-mongodb handle constructors when rehydrating objects?spring-data-mongodb 在重新水化对象时如何处理构造函数?
【发布时间】:2013-01-31 11:45:51
【问题描述】:

我已阅读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 字段会发生什么?不属于构造函数的所有字段是否仍会被初始化,或者str2, date3 值是否会丢失,因为找到了仅使用 str1 的 PeristenceConstructor?

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

【问题讨论】:

    标签: java spring mongodb spring-data spring-data-mongodb


    【解决方案1】:

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

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

    您示例中的dateproperty 在构造函数初始化后仍会被设置如果对象物化的源文档包含date 的值。

    【讨论】:

    • 谢谢奥利弗!这在 spring-data-mongodb 文档中值得注意。
    • 我现在有足够的声望来修改它。再次感谢。
    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 2021-06-04
    相关资源
    最近更新 更多