我已阅读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
将由构造函数设置,然后被先前持久化的字段覆盖,反之亦然?
1 回答
人口过程是双重的,并且在某种程度上是正交的 . 大多数情况下,您已经说明了正确的行为 . 调用构造函数以创建对象实例 . 参数值是从
DBObject
读取的,并且可能导致递归创建对象,以防您将复杂对象移植到需要从嵌套DBObject
解组的构造函数中 .下一步是填充持久字段 . 您的情况与默认构造函数的唯一区别在于我们记住您传递给构造函数的字段值,并且不会重新填充它们 .
如果实现对象的源文档包含
date
的值,则示例中的date
属性仍将在构造函数初始化后设置 .