ID为null的嵌入式文档保存

时间:2019-09-27 11:46:38

标签: java mongodb spring-data-mongodb

我有一个包含嵌入式文档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"
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

假设您要将SubGrid另存为嵌入式文档,则@Document类中不需要@IdSubGrid。因此,这里您是在save()的对象上调用TariffGrid吧?因此spring-data-mongo将在保存文档之前生成唯一的“ Id”。 Spirng-data-mongo不会自动为嵌入式文档生成ID。 假设如果您使用save()对象再调用一个存储库SubGrid方法, 它会自动生成id字段,因为您已经添加了注释,但这意味着SubGrid将分别保存在另一个集合中,并且在其中将有id

我相信您已经将其与休眠状态下的情况混淆了,在休眠状态下它也使用@oneToMany和CascadeType来保存相关实体。但是在mongoDB和嵌入式文档中不是这种情况。