我有一个列表,每个员工都有一名经理。因此,对于每个对象,其中都有一个manager引用,它不是一个管理器id,而是一组字段,通过这些字段我们可以识别一个管理器。
每个Manager对象都有员工引用列表
所以课程是这样的
Class Manager {
ObjectId _id;
//some attributes
List<Employees> employees;
LocalDateTime createdOn;
}Class Employee {
ObjectId _id
//some attributes
Manager manager; //Having only attributes but not ObjectId of manager
LocalDateTime createdOn;
}我们这样做是因为可以更改这个管理器的名称和一些属性,因此可以在manager集合中引入一个新的Manager对象,然后所有现有的雇员现在都属于新的Manager对象。我们的结构就是这样。
在查询时,我们将获得Manager的属性,并根据属性和createdOn字段返回经理的最新员工列表
所以我面临的问题是:
在保存属于新Manager的新员工列表时,我首先使用mongoClient的mongoClient()函数保存所有员工。然后使用insert()保存Manager。
如果在保存员工列表之后,在保存Manager之前,发生了一些在Mongo和Db上发生的坏事,所以我无法保存Manager,因此所有员工现在都将成为孤儿。
我可以遵循什么样的策略,以确保当MongoDB再次出现时,我可以首先存储所有挂起的对象,然后继续执行其余的操作。
我使用的是SpringBoot 2和原始Java驱动程序3.8.0和Java 8
我尝试了Mongo写选项,但只尝试过一次。
发布于 2019-01-25 10:34:26
从我的头顶上,想到了以下两种选择。
发布于 2019-01-26 04:56:15
从4.0版开始,mongodb支持事务。请参阅https://docs.mongodb.com/manual/core/transactions/和java示例。注意,3.8驱动程序已经包含了所有必要的方法,支持只是数据库服务器版本的一个问题。
https://stackoverflow.com/questions/54363363
复制相似问题