假设我有:
class Car {
...
@OneToMany(mappedBy = "wheel", fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
Set<Wheel> wheels;
}
class Wheel {
...
@ManyToOne(fetch = FetchType.LAZY)
Car car
}
我有这个代码(spring data,wheelRepository扩展了CrudRepository)来删除一个Wheel:
wheelRepository.delete(wheel);
代码不会删除轮子,也不会抛出任何异常。 查看sql日志,没有“删除”语句。
我终于发现了一个问题:我有一辆车,其轮组包含车轮。
这样做可以解决问题:
car.getWheels().remove(wheel);
wheelRepository.delete(wheel);
但是是否可以避免第一行:当我删除车轮时,我希望车轮自动从汽车上移除?
另一个问题:默认情况下是否可以抛出异常而不是“静默不删除”?
谢谢!
最佳答案
你想要的不太可能。当您调用wheelRepository.delete(wheel)
时,您实质上是要求从数据库中删除轮子。但这无法从正在运行的应用程序中现在引用该实例的所有其他位置删除实例wheel
。例如car.wheels
。所以这个实例将继续存在。因此,它无法从数据库中删除。如果您想移除车轮
,您必须首先将其从所有使用该车轮
的汽车
上移除。就像现实生活中一样:)
关于java - 删除在 Hibernate/Spring Data 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50385077/