java - 删除在 Hibernate/Spring Data 中不起作用

标签 java hibernate spring-boot spring-data

假设我有:

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/

相关文章:

java - 阿拉伯语数据正在转换为????当java程序使用Select语句从Oracle表查询xml有效负载时

java - hibernate 工具 : how to ignore foreign keys?

java - 如何检查Spring Boot应用程序在自动配置类中是否有某个注释

java - 使用 Spring 连接远程数据库时出现访问被拒绝错误

java - Guava缓存asMap方法

java - 如何从两个单独的线程更新数组

java - 创建一个运行预定义代码块的快捷方式/宏?

java - 映射异常: Unable to find column with logical name

mysql - 在 docker-compose 中使用 MySQL 初始化 Hibernate 时连接被拒绝

java - SpringBoot Heroku org.maven.plugins :maven-compiler-plugin:3. 8.1:编译失败