当前位置: 首页 > 面试题库 >

morphia将字段名称“ ClassName”插入到mongodb中

冷英博
2023-03-14
问题内容

我对mongodb和morphia相当陌生,在开始使用它之后,我意识到mongodb文档中还有一个额外的部分,该记录包含一个文件名“
ClassName”,其中包含了morphia映射的类的值。

{ "_id" : ObjectId("51e7a85e300441e5885316c0"), "className" : "models.User", "imgurl" : "", "uname" : "alex"}

这正常吗?我觉得这违反了数据库中数据的完整性,是否有解决的办法?


问题答案:

您可以显式禁用该className属性:@Entity(noClassnameStored = true)

如果只有一个实体类,我通常会抑制该属性。如果要对我的实体进行子类化,则将明确启用它(这是默认设置,但可以肯定)。

如果我没记错的话,Morphia足够聪明,即使没有属性className(基于反射),也可以根据属性猜测正确的子类。因此,如果您在 Person
的子类 Developer 中具有 mongoKnowledge 属性,而您的子类 Manager 没有属性,Morphia将知道具有
mongoKnowledge的 文档必须属于 Developer 类。因此严格来说,仅当您的子类具有相同的属性时才需要;但是,我不会太依赖它。
__className

我没有尝试重命名实体类,但可能会引起问题。提供@Polimorphic注释并将其修复在一起是一个长期存在的问题。请参阅https://code.google.com/p/morphia/issues/detail?id=22



 类似资料:
  • 问题内容: Jackson json注释中以下jax-b注释的等效方式是什么? 我需要生成json而不是xml,并且需要了解在jax-b中等效表示的常规jackson批注。 重命名字段。 使用getter代替字段。 如果json / xml元素名称是Java保留字(例如“ ”,“ ”,“ ”等),则这些功能尤其重要。 因此我们必须将POJO字段分别命名为“ new ”,“ _ public ”,“

  • 我有一个类似这样的mongoDocument结构,注释字段作为嵌入文档。 我想添加 “newField” : “something” 到 嵌入的注释字段中 “cid” : “17426944” : 在java驱动程序中,我尝试了: 这里的问题是: 示例文档: 我需要什么 : 请帮帮我,谢谢vijay

  • 问题内容: 我有一个来自遗留系统的悖论表,我需要对其进行单个查询。字段名称中包含空格-即“街道1”。当我尝试在delphi中仅对“街道1”字段制定查询时,出现错误- 关键字使用无效。令牌:1,行号:1 Delphi V7-对象Pascal,标准Tquery对象名称query1。 问题答案: 您需要在查询中为字符串加上表名的前缀。 例如:字段名称为“ Street 1”,表称为客户,选择为:

  • 问题内容: 在Java中能否从实际字段中获取字符串中的字段名称?喜欢: PS:我 不是 在寻找字段的类/类名,也不是从String中的名称获取Field。 编辑:当我查看它时,我可能不需要一种获取字段名称的方法,该Field实例(来自字段的“代码名称”)就足够了。[例如] Java本身可能没有想要的东西。我将看一下ASM库,但最后我可能最终会使用字符串作为字段的标识符:/ EDIT2:我的英语不好

  • 当我尝试将一个名为someKPIObject对象的KPI实例添加到Mongodb时,使用 我得到以下错误: 警告:参数化类型被视为非类型化对象。请参见类KPI org.mongodb.morphia.mapping.mapping.mapping.mapping.mapper.todbobject(mapper.java:984)在org.mongodb.morphia.mapping.mappe

  • 我正在开发一个Java的Restful Web应用程序,并计划将MongoDB与吗啡用作ODM。由于我是MongoDB的新手,我需要一些建议。 > 处理db连接的最佳方法是使用db连接池,mongoClient负责处理。 所以我需要重用上面的数据存储,而不是在每次请求时创建一个新实例,因为它会浪费大量资源并影响性能。我应该将上述实现为单例类吗?有人能帮我解决这个问题吗?