Как избежать передачи удаленного экземпляра для слияния в отношении «Один ко многим» с Set? - PullRequest
0 голосов
/ 26 июня 2018

У меня есть это отображение в спящем объекте.

A.java

@OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
Set<B> bs;

B.java

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "A_ID")
A a;

Мне нужно выполнить редактирование A.

Таким образом, после загрузки сущности в методе, помеченном Spring @Transactional

A a = entityManager.find(A.class, a.getId);
// set some new values on the instance variables of a.

// take out the set of Bs through a and delete them
for(B b : a.getBs()) {
    entityManager.remove(b);
}

// create new objects of B and add them to the below set-
Set<B> bs = new HashSet<>();
a.setBs(bs);

entityManager.merge(a);

Приведенный выше код является частью одиночного метода .

Я получаю - удаленный экземпляр передан для слияния. Пожалуйста, предложите.

1 Ответ

0 голосов
/ 26 июня 2018

Вы используете cascade = CascadeType.ALL в классе B.Таким образом, при выполнении entityManager.remove(b) операция удаления происходит каскадно и при удалении a.

Вы можете сделать что-то подобное в B в соответствии с вашими потребностями:

@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...