Как удалить объекты из отношений OneToMany, инициализированных на двух разных объектах? - PullRequest
0 голосов
/ 02 октября 2019

У меня список объявлен в двух объектах:

//entity: Foo
@OneToMany(fetch = FetchType.EAGER, mappedBy = "foo", cascade = CascadeType.ALL, orphanRemoval = true)
@Fetch(FetchMode.SUBSELECT)
private List<BarFoo> barFoos;

//entity: Bar
@OneToMany(fetch = FetchType.EAGER, mappedBy = "bar", cascade = CascadeType.ALL, orphanRemoval = true)
@Fetch(FetchMode.SUBSELECT)
private List<BarFoo> barFoos;

Затем я пытаюсь удалить объект Foo из объекта Bar, т.е. мне нужно удалить объект BarFoo из соответствующих списков (в Bar иFoo entity).

Я успешно удалил его, но данные по-прежнему не объединяются. Я не знаю, что еще я могу сделать, чтобы решить эту проблему, поэтому я прошу вас о помощи.

//id from BarFoo class:
@EmbeddedId
private BarFooId barFooId = new BarFooId ();

//id class:
private Integer barId;
private Integer fooId;

if(!barFoosToDelete.isEmpty()){

    barFoosToDelete.stream()
        .map(BarFoo::getFoo)
        .forEach(foo -> foo.getBarFoos().removeAll(barFoosToDelete.stream()
            .filter(barFoo -> barFoo.getFoo().equals(foo))
            .collect(Collectors.toList())));

    barFoosToDelete.forEach(barFoo -> fooCRUD.merge(barFoo.getFoo()));
    barFoosToDelete.forEach(barFoo -> barFooCRUD.remove(barFoo));

    barFoosToDelete.clear();
}
...