【问题标题】:How do I map "id" property into "id" field in Mongo without @Field annotation?如何在没有 @Field 注释的情况下将“id”属性映射到 Mongo 中的“id”字段?
【发布时间】:2021-03-06 06:14:10
【问题描述】:

我有多个带有id 字段的类。我想使用 spring-data-mongodb 将他们的实例存储在 MongoDB 中。我想将这些类中的 id 属性映射到 Mongo 中的 id 字段。

这就是我的课程的样子:

public class Entity {
    private final String id; // = 42

    ...
}

这就是我期望在 Mongo 收藏中出现的内容:

{
    "_id": ObjectId("5fba805dfdaaa760974d45de"),
    "id": "42"
}

By default,spring-mongodb 将 id 属性映射到 Mongo 中的 _id 字段。我知道避免这种情况的最简单方法是将@org.springframework.data.mongodb.core.mapping.Field("id") 注释放在Java 类中的id 属性上。但我不想使用这个注释,因为我想让我的模型独立于 Mongo、Spring 或其他任何东西。这里有哪些可能的选择?

这是我尝试或检查过的:

  1. 注册自定义 AbstractMongoEventListener 以便在将 Mongo 文档写入 Mongo 之前或刚刚从 Mongo 读取之后对其进行修改。它对我不起作用,因为自定义侦听器仅在 get 和 insert 操作期间被调用,而不是在 update 或 upsert 操作期间调用(有关详细信息,请参阅讨论 here)。

  2. 提供自定义 FieldNamingStrategy — 它不起作用,因为在 spring-data-mongodb 代码中他们使用策略 only if 字段名称不是 id_id

  3. 为我的每个课程提供自定义转换器。我相信它应该工作。但是这种方法似乎太复杂了,因为我有很多类,每个类都有很多属性,我不确定我是否希望有很多转换器,里面有样板代码。

任何帮助将不胜感激。

【问题讨论】:

    标签: spring spring-mongodb


    【解决方案1】:

    你不觉得 id 和 _id 已经很混乱了吗?

    如果您有充分的正当理由拥有 id(与 DB 不同);给它一个名字。例如:version_id, old_id, other_services_id ...一些有意义的名字。

    是的,在你的情况下使用 @Field 是最简单的方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2014-08-11
      相关资源
      最近更新 更多