Предположим, у меня есть DAO с именем Assignment, который объявляется с помощью карты @Document с именем коллекции Mongo.
Затем у меня есть служебный компонент, например AssigmentImpl, который находится в одноэлементной области, выполняя операцию обновления, при которой он извлекает сохраняемый DAO и обновляет некоторые с помощью входных данных REST для Назначения.
@Service
public class AssignmentImpl{
public Assignment updateAssignment(Assignment assignment){
Assignment assignmentExsisting = assignmentRepo.getAssignment(assignment.getId());
BeanUtils.copyProperties(assignment,assignmentExsisting);
assignmentRepo.save(assignmentExsisting);
}
}
Допустим, несколько потоков (пользователей) выполняют операции обновления для разных назначений.
Будучи AssignmentService одноразовым, он будет возвращать одну и ту же копию разным пользователям. Как это ссылается на объект назначения? Если я скажу, поскольку объект Assignment не является одноэлементным, он будет возвращать разные ссылки на объекты в AssignmentImpl, когда каждый пользователь выполняет операцию обновления, верно?
В этом случае пользователь A может получить идентификатор 123 назначения перед выполнением операции обновления, а когда пользователь B начнет выполнять операцию обновления, AssignmentImpl изменит ссылку на назначение на другой идентификатор 456. В этом случае пользователь A обновит совершенно другое назначение. , Это возможно? Если так, как мы можем предотвратить это? Сделайте операцию обновления синхронизированной или есть другие хорошие решения?