【发布时间】: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 或其他任何东西。这里有哪些可能的选择?
这是我尝试或检查过的:
-
注册自定义 AbstractMongoEventListener 以便在将 Mongo 文档写入 Mongo 之前或刚刚从 Mongo 读取之后对其进行修改。它对我不起作用,因为自定义侦听器仅在 get 和 insert 操作期间被调用,而不是在 update 或 upsert 操作期间调用(有关详细信息,请参阅讨论 here)。
-
提供自定义 FieldNamingStrategy — 它不起作用,因为在 spring-data-mongodb 代码中他们使用策略 only if 字段名称不是
id或_id。 -
为我的每个课程提供自定义转换器。我相信它应该工作。但是这种方法似乎太复杂了,因为我有很多类,每个类都有很多属性,我不确定我是否希望有很多转换器,里面有样板代码。
任何帮助将不胜感激。
【问题讨论】:
标签: spring spring-mongodb