我不确定 Morphia 是否是这样设计的,但它是这样的......
Student.class(方法略)
@Entity(value = "students", noClassnameStored = true)
public class Student
{
@Id
private String id = new ObjectId().toString();
private String name;
private String city = "London"; // Default Value
}
注意:我已经分配了一个DEFAULT价值Instance多变的city
。
现在代码...
Student s1 = new Student("James Bond"); // London IS his default city
ds.save(s1);
Student s2 = new Student("Jason Bourne");
s2.setCity("New York"); // Set a city for Mr. Bourne
ds.save(s2);
System.out.println("----- Normal -----");
List<Student> studentsNormal = ds.createQuery(Student.class).asList();
for(Student s: studentsNormal)
System.out.println(s);
System.out.println("----- Projected -----");
Query<Student> query = ds.find(Student.class);
query.retrievedFields(false, "city");
List<Student> studentsProjected = query.asList();
for(Student s: studentsProjected)
System.out.println(s);
而且,现在输出...
----- Normal -----
Student{id='57337553db4f0f0f10a93941', name='James Bond', city='London'}
Student{id='57337553db4f0f0f10a93942', name='Jason Bourne', city='New York'}
----- Projected -----
Student{id='57337553db4f0f0f10a93941', name='James Bond', city='London'}
Student{id='57337553db4f0f0f10a93942', name='Jason Bourne', city='London'}
现在,有 4 个关于吗啡行为的问题......
Q1.对于邦德先生,我没有改变city
并排除city
从投影列表中,但默认值city
打印为London
。这不应该是空的吗?
Q2。对于伯恩先生,我确实改变了city
to New York
但仍在投影过程中,它选择了默认值并显示London
。这不应该也为空吗?
我还没有看到来自 Morphia 的 Projection.class (打算今晚这样做),但似乎对于排除, Morphia 似乎采用了默认值并且不会覆盖null
。现在这成为一个障碍,因为我没有任何方法可以为我的实例变量提供默认值而不将它们暴露给客户端......
Q3。这是 Morphea 还是 MongoDB Java 驱动程序行为/问题?
最后一个问题...
Q4。有什么已知的解决方法吗?
我已经用谷歌搜索过,但到目前为止还没有找到任何解决方案或解释......
提前致谢...
SG