我有一个包含嵌入式文档tariffGrid
的文档subGrids
,当我保存文档TariffGrid
时,嵌入式文档的id
被保存为空>
我将private ObjectId _id
用于嵌入式文档,但是仍然存在相同的问题
@Document
public class TariffGrid {
@Id
private String id;
private List<SubGrid> subGrids;
}
@Document
public class SubGrid {
@Id
private String id;
private String name;
}
{
"_id" : ObjectId("5d8df1f9ccd0df45146817a6"),
"subGrids" : [
{
"_id" : null,
"name" : "string"
}
]
}
答案 0 :(得分:0)
假设您要将SubGrid
另存为嵌入式文档,则@Document
类中不需要@Id
和SubGrid
。因此,这里您是在save()
的对象上调用TariffGrid
吧?因此spring-data-mongo将在保存文档之前生成唯一的“ Id”。 Spirng-data-mongo不会自动为嵌入式文档生成ID。
假设如果您使用save()
对象再调用一个存储库SubGrid
方法,
它会自动生成id
字段,因为您已经添加了注释,但这意味着SubGrid
将分别保存在另一个集合中,并且在其中将有id
。
我相信您已经将其与休眠状态下的情况混淆了,在休眠状态下它也使用@oneToMany和CascadeType来保存相关实体。但是在mongoDB和嵌入式文档中不是这种情况。