我对 mongodb 和 morphia 还很陌生,开始使用它后,我意识到 mongodb 文档中有一个额外的部分,该记录包含一个文件名“ClassName”,其中包含 morphia 映射的类的值。
{ "_id" : ObjectId("51e7a85e300441e5885316c0"), "className" : "models.User", "imgurl" : "", "uname" : "alex"}
这正常吗?我觉得这违反了数据库中数据的完整性,有没有办法绕过它?
最佳答案
您可以显式禁用 className
属性:@Entity(noClassnameStored = true)
如果有单个实体类,我通常会抑制属性。如果我对我的实体进行子类化,我会明确启用它(这是默认设置,但只是为了确定)。
如果我没记错的话,即使没有 className
(基于反射),Morphia 也足够聪明,可以根据属性猜测正确的子类。因此,如果您在 Person 的子类 Developer 中有一个属性 mongoKnowledge 而您的子类 Manager 没有它,Morphia 将知 Prop 有 mongoKnowledge 的文档必须属于 Developer 类。所以严格来说 className
只有当你的子类具有相同的属性时才需要;不过,我不会太依赖它。
我没有尝试重命名实体类,但它可能会导致问题。提供 @Polimorphic
注释并将其与它一起修复是一个长期存在的问题。见 https://code.google.com/p/morphia/issues/detail?id=22
关于java - morphia 将字段名称 "ClassName"插入到 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17719018/