Сохранение сущности с отношением один ко многим перезаписывает изменения базы данных или связанные сущности - PullRequest
0 голосов
/ 06 ноября 2018

Я создал объект DownloadDroplet со ссылкой ManyToOne на Process

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

И обработайте ссылку «один ко многим» на DownloadDroplet

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

У меня есть код, который получает DownloadDroplets от dropletRepo и в конечном итоге сохраняет и сбрасывает обновления базы данных, которые я визуально подтверждаю, обновляются в базе данных

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

...

Затем я сохраняю статус процесса

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

и это перезаписывает изменения, сохраненные в этой базе данных, с помощью dropletRepo, фактически отменяя изменения, ранее сохраненные в базе данных.

Поэтому я предполагаю, что поскольку DownloadDroplets имеют отношение к Process, и я сохраняю процесс после сохранения downloaddroplets, у меня возникла эта проблема.

Как мне избежать этой проблемы?

С уважением Конте

1 Ответ

0 голосов
/ 06 ноября 2018

Скорее всего, вам нужно объединить сущность Process, прежде чем вносить в нее изменения.

Это обновит состояние тем, что ранее было сохранено в контексте.

У вас уже есть каскадное слияние из-за cascade = CascadeType.ALL в аннотации @OneToMany, поэтому это будет распространяться на все DownloadDroplet сущностей в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...