gpt4 book ai didi

java - 保存具有一对多关系的实体会覆盖数据库更改或相关实体

转载 作者:行者123 更新时间:2023-12-02 01:49:40 27 4
gpt4 key购买 nike

我创建了一个实体 DownloadDroplet,其中包含对 Process 的 ManyToOne 引用

@ManyToOne
@JoinColumn(name = "process_id")
private Process process;

并使用对 DownloadDroplet 的一对多引用进行处理

@OneToMany(fetch = FetchType.EAGER, mappedBy = "process", cascade = CascadeType.ALL)
private Set<DownloadDroplet> downDrops;

我有代码从dropletRepo获取DownloadDroplets,并最终将更新保存并刷新到数据库,我直观地确认数据库中已更新

Set<DownloadDroplet> aDownDropSetCompleted = dropletRepo.findByStatusAndRunDateAndType(DropletStatus.COMPLETED, runDateAsDate, FBTDropletType.SETDOWNLOADER);

...

然后我保存进程的状态

 setProcess.setStatus(ProcessStage.GETTINGPRODUCTS);
processRepo.saveAndFlush(setProcess);

这会使用 DropletRepo 覆盖保存到该数据库的更改,从而有效地撤消之前保存到数据库的更改。

所以我假设因为 DownloadDroplets 与 Process 有关系,并且我在保存 downloaddroplet 后保存进程,所以我遇到了这个问题。

如何避免这个问题?

问候康特

最佳答案

很可能您必须先合并 Process 实体,然后再对其进行更改。

这将刷新之前保存在上下文中的状态。

由于 @OneToMany 注释上的 cascade = CascadeType.ALL,您已经有了级联合并,因此这将传播到所有 DownloadDroplet 实体在列表中。

关于java - 保存具有一对多关系的实体会覆盖数据库更改或相关实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53170812/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com