java - 删除 Spring Boot 中的外键约束错误
问题描述
大家好,希望你们一切都好。我正在我的spring boot项目中添加两个实体Category和Item,它们之间的关系是OneToMany ,即一个Category可以有多个item,许多 item 只能有一个category。根据我的项目要求,当用户删除类别时,其关联项目也将被删除。但是当我尝试删除它说的类别时;
Cannot delete or update a parent row: a foreign key constraint fails
(`srms_db`.`issued_item`, CONSTRAINT `FK64cj06b00l58h8yi4msjuljll` FOREIGN KEY (`ii_fk`) REFERENCES `item` (`item_id`))
我正在提供一些代码以进行更多解释;
类别实体代码
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "Category")
public class Category implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cat_id", nullable = false)
private int catId;
@Column(name = "cat_type", nullable = false)
private String catType;
@Column(name = "cat_desc", nullable = true)
private String catDesc;
@OneToMany(mappedBy = "category", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Items> items;
和
项目实体代码
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Data
@Table(name = "Item")
public class Items implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_id")
private int itemId;
@Column(name = "item_name", nullable = false)
private String itemName;
@Column(name = "item_quantity", nullable = false)
private int itemQuantity;
@Column(name = "item_received_date", nullable = false)
private Date itemReceivedDate;
@OneToMany(mappedBy = "item", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<DamageItem> damageItems;
@OneToMany(mappedBy = "item", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<IssuedItem> issuedItems;
@ManyToOne
@JoinColumn(name = "ic_fk")
private Category category;
}
笔记
I also try on cascade=CascadeType.REMOVE, DETACH, REFRESH, etc but futile
已发行项目实体
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "Issued_Item")
public class IssuedItem implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "issued_id", nullable = false)
private int IssuedItemId;
@Column(name = "issued_from", nullable = false)
private String IssuedFrom;
@Column(name = "issued_to", nullable = false)
private String IssuedTo;
@Column(name = "issued_quantity", nullable = false)
private int IssuedQuantity;
@Column(name = "issued_date", nullable = false)
private Date IssuedDate;
@ManyToOne
@JoinColumn(name = "ii_fk")
private Items item;
}
我还提供了损坏项目实体代码
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "Damage_Item")
public class DamageItem implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "damage_id", nullable = false)
private int DamageItemId;
@Column(name = "damage_quantity", nullable = false)
private int DamageQuantity;
@Column(name = "damage_date", nullable = false)
private Date DamageDate;
@ManyToOne
@JoinColumn(name = "id_fk")
private Items item;
}
提前致谢。
解决方案
推荐阅读
- python - 如何使用shutil.copy2?
- android - 如何检查我发送的请求是否被拒绝?
- node.js - 在 Puppeteer 的 async/await 中使用 setInterval
- python - 获取 pandas 中多个数据帧的每个第 n 个元素
- linux - 找不到包 linux-headers-4.15.0-kali2-amd64
- c - 如何在 C 中将字符串从文件拆分为更小的字符串?
- wso2 - 使用来自呼叫中介的丰富响应负载
- python - Microsoft Azure:使用 Azure API for Python 在 Linux 上获取凭据
- javascript - Vuejs 不会在 HTML 表格元素中呈现组件
- dynamics-crm - 基于安全角色的 Microsoft Dynamics CRM 门户评论