java - morphia 将字段名称 "ClassName"插入到 mongodb

标签 java mongodb morphia

我对 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/

相关文章:

java - 如何更改 IntelliJ IDEA 默认 JDK?

javascript - mongodb同步请求

node.js - Mongodb 找到最佳匹配

java - 何时使用 MongoDB Driver/Morphia 而不是 Hibernate

java - 如何将 MongoDB 中存储的复合 ID 转换为 Morphia Java 实体对象?

Java - 从字符串类型转换为泛型类型

java - 如何使用 Thymeleaf 从选择框中获取输入

PHP 和 Mongo - findOne() 导致内存耗尽

java - gwt + mongo (吗啡) = IncompleteClassChangeError

java - 使用扩展 ASCII 范围将 int 转换为 char 并返回