如何在没有注释的情况下将"id"属性映射到 Mongo "id"字段中@Field?



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

下面是我的课程:

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

以下是我期望在Mongo系列中出现的内容:

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

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

以下是我尝试或检查过的内容:

  1. 注册自定义AbstractMongoEventListener,以便在将Mongo文档写入Mongo之前或从Mongo读取文档之后修改Mongo文档。它对我不起作用,因为自定义侦听器只在获取和插入操作期间调用,而在更新或追加启动操作期间不调用(有关详细信息,请参阅此处的讨论(。

  2. 提供自定义的FieldNamingStrategy——它不起作用,因为在spring数据mongodb代码中,只有当字段名称不是id_id时,他们才会使用策略。

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

如有任何帮助,我们将不胜感激。

您不认为id和_id已经混淆了吗?

如果你有充分的理由拥有一个id(不同于DB id(;给它一个名称。例如:version\id、old_id、other_services_id。。。一些有意义的名字。

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

最新更新