gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:13:14 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com