发布对象时发生ConcurentModifiationException异常

pnwntuvh  于 2022-09-18  发布在  Spring
关注(0)|答案(1)|浏览(167)

当我第一次运行POST时(当id尚未保存在数据库中时),它返回“ConCurrentModifiationException:NULL”;

dto.getObservations().stream()
                .map(productObservationsService::convertDTOToModel)
                .forEach(model::addObservation);

这是我的实体:

@OneToMany(mappedBy = "relatedProduct", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private List<ProductObservationModel> observations;

public void addObservation(ProductObservationModel observationModel) {
    if (this.observations == null)
        this.observations = new ArrayList<>();

    observations.add(observationModel);
    observationModel.setRelatedProduct(this);
}

有人知道这会是什么吗?

von4xj4u

von4xj4u1#

老实说,我不知道你说的“当我第一次发布帖子时(当ID还没有保存在数据库中时)”是什么意思。

您的问题是,您试图在迭代列表时写入列表,而该列表不是为此而设计的(观察)。

如果列表始终由您提供,则可以将this.observations = new ArrayList<>()更改为this.observations = new CopyOnWriteArrayList<>()。您可以阅读有关列表如何在JavaDoc上工作的更多信息

如果不是,则可以在迭代之前复制该列表,或将添加的ProductObservationModel保存在其他列表中,并在迭代后添加它们。

new ArrayList<>(dto.getObservations()).stream()
            .map(productObservationsService::convertDTOToModel)
            .forEach(model::addObservation);

相关问题