我有一个基本的 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;
...
}
但是我从 Controller 中删除了一个钱包,该钱包有发票和购买并且属于用户,该钱包未从数据库中删除
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=?
没有删除,没有异常(exception)! !
最佳答案
在 Controller 中尝试这个:
user.getWallets().remove(wallet);
walletService.delete(wallet);
userService.save(user);
关于hibernate - 使用 Spring Data JPA 删除 SpringBoot 2.0.5.RELEASE 应用程序中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454641/