У меня есть базовое приложение SpringBoot 2.0.5.RELEASE.Используя Spring Initializer, JPA, встроенный Tomcat, шаблонизатор Thymeleaf и пакет в качестве исполняемого файла JAR.
У меня есть этот класс:
public class User implements Serializable {
@OneToMany( cascade = CascadeType.ALL,orphanRemoval = true,
fetch = FetchType.EAGER,mappedBy = "user")
@JsonIgnore
private List<Wallet> wallets = new ArrayList<Wallet>();
..
}
и этот:
public class Wallet implements Serializable {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "invoice_id")
@JsonIgnore
@NotNull
private Invoice invoice;
@OneToMany(mappedBy = "wallet",
cascade = CascadeType.ALL,
orphanRemoval = true, fetch = FetchType.LAZY)
@JsonIgnore
private Set<Purchase> purchases = new HashSet<>();
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id" , nullable=false)
@JsonIgnore
private User user;
..
}
и этот другой:
public class Purchase implements Serializable {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "wallet_id")
@JsonIgnore
Wallet wallet;
...
}
Но я удаляю кошелек из контроллера, который имеет счет-фактуру и покупки и принадлежит пользователю, кошелек не удаляется из БД
walletService.delete(walletService.findById(id).get());
это метод обслуживания:
@Transactional
public void delete(Wallet wallet) {
if (LOG.isDebugEnabled()) {
LOG.debug("deleting Wallet [ " + wallet + " ]");
}
wallet
.getPurchases()
.parallelStream()
.forEach(p -> purchaseService.delete(p));
walletRepository.delete(wallet);
}
и
@Transactional
public void delete (Purchase purchase ) {
purchaseRepository.delete (purchase);
}
в файле свойств:
spring.jpa.show-sql=true
и последний запрос, который я вижу вконсоль вот такая:
select
purchases0_.wallet_id as wallet_i8_13_0_,
purchases0_.id as id1_13_0_,
purchases0_.id as id1_13_1_,
purchases0_.amount as amount2_13_1_,
purchases0_.wallet_id as wallet_i8_13_1_
from
t_purchase purchases0_
where
purchases0_.wallet_id=?
и без удаления и без исключений !!!!