spring-boot - JPA。双向关联:ManyToOne。删除父级时如何删除关联?
问题描述
我有两个实体:Product
和Category
public class Category {
@Id
@GeneratedValue(generator = "inc")
@GenericGenerator(name = "inc", strategy = "increment")
private int id;
@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "category")
private Set<Product> products;
}
public class Product {
@Id
@GeneratedValue(generator = "inc")
@GenericGenerator(name = "inc", strategy = "increment")
private int id;
@ManyToOne
@JoinColumn(name = "categories_id")
private Category category;
}
在删除父级(类别)后,我想将我的子级(产品)保留在 db 中(值category
等于null
)。目前,当我尝试删除一个类别时,我收到此错误:
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "CONSTRAINT_F2: PUBLIC.PRODUCTS FOREIGN KEY(CATEGORIES_ID) REFERENCES PUBLIC.CATEGORIES(ID)
解决方案
在删除类别之前,您需要更新关联。例如:
Category category = ...
for (Product p : category.getProducts()) {
p.setCategory(null);
}
category.getProducts().clear();
entityManager.remove(category);
推荐阅读
- spring-boot - Spring 和 Kafka:对 Kafka Producer 和 Kafka Streams 使用相同的绑定
- flutter - 如何在颤动中更改我的平面按钮的位置......(从最左边到最右边)
- java - 查找与用户输入匹配的数组中的第一个元素并在 2 个二维数组之间打印该位置
- javascript - 如何使用模态对话框库将用户输入存储为变量?(JavaScript)
- c++ - (char*)&obj 替代品
- javascript - 如何修复:discord.js 中的“TypeError:无法读取未定义的属性‘标签’”错误
- css - FullPage.JS 分屏。在移动设备上使其成为一页样式
- javascript - 在android上运行应用程序时出现问题
- css - webpack 4:创建多个主题 css 文件
- oracle - Oracle 从一个查询中选择另一个查询中不存在的行