Извините за этот новый вопрос, но я не нашел удовлетворительного ответа для своего случая: (
У меня есть отношение manyToMany:
Субъект подписки (объект-владелец):
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name = "SubscriptionSignerMapping",
joinColumns = @JoinColumn(name = "subscriptionId", referencedColumnName = "id", nullable = false),
inverseJoinColumns = @JoinColumn(name = "signerId", referencedColumnName = "id", nullable = false))
private List<Signer> signers = new ArrayList<Signer>();
Подписывающее лицо (собственное лицо):
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "signers")
private List<Subscription> subscriptions = new ArrayList<Subscription>();
Когда я удаляю подписку, я не хочу, чтобы подписывающая сторона была удалена , кроме случаев, когда удаленная подписка является последней для подписывающая сторона .
Итак, мой код (в методе @Transactional):
subscription.getSigners().stream().filter(s -> s.getSubscriptions().size() == 1).forEach(s -> {
signerService.delete(s);
});
subscriptionService.deleteSubscription(subscription);
Мой уровень обслуживания просто вызывает CrudRepository из Spring-data. Что я вижу:
У меня нет ошибки
Подписка удалена из моей базы данных
В таблице сопоставления строка удаляется
Подписавшая сторона все еще присутствует в базе данных
Мой стек: java 8 / spring-boot 2.1
У вас есть предложения?
Спасибо.