很抱歉这个新问题,但我的案例没有找到令人满意的答案:(
我有一个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);
我的服务层仅调用Spring数据的CrudRepository。 我所看到的:
我没有错误
该订阅已从我的数据库中删除
在映射表中,该行被删除
签名人仍然存在于数据库中
我的堆栈:java 8 / spring-boot 2.1
您有什么建议吗?
谢谢。