Как выбрать объекты с примененными модификациями для связанных объектов «один ко многим» в одной транзакции? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть сервисный метод, который создает, обновляет и удаляет объекты в одной транзакции.В теле запроса я получил массив с идентификаторами сущностей, которые я должен удалить.Объект A ссылается на объект C. Объект B также ссылается на объект C с отношением один-ко-многим.Когда я удаляю объект A, объект C также удаляется.Затем я выбираю объект B с указанным идентификатором.Если он относится к объекту CI, он все еще может видеть его, на который ссылается B. Есть ли способ получить объект B таким образом, чтобы объект C больше не ссылался на него?

Я использую весеннюю загрузку с помощью hibernate и postgresql10. Я пробовал уровень изоляции READ_UNCOMMITED с помощью метода service, который выбирает объекты, но безрезультатно.Любая помощь будет оценена.

@Entity
public class A extends AbstractNamedAuditable {

@OneToMany(mappedBy = "...", fetch = FetchType.EAGER, cascade = {CascadeType.REMOVE })
@Fetch(value = FetchMode.SUBSELECT)
private List<C> foo;

}

@Service
@Transactional
public class MyService {

public void doTheJob(long[] ids) {
    A first = getById(ids[0]);
    repo.delete(first);

    A second = getById(ids[1]);
    repo.delete(second);
// here I get 
//org.springframework.dao.InvalidDataAccessApiUsageException: Removing a detached instance C.class

}

@Transactional(isolation = Isolation.READ_UNCOMMITTED)
protected A getById(long id) {
    return repository.getById(id);
}
}
...