gpt4 book ai didi

java - 表 'USER' 上的 DELETE 导致外键违规

转载 作者:行者123 更新时间:2023-11-29 18:03:41 25 4
gpt4 key购买 nike

当我尝试删除与表“ADDRESS”相关的名为“USER”的表中的行时遇到问题。特别是,这是我的 User 实体类的一部分

public class User implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String username;
@Column(unique = true)
private String email;
private String password;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Address> addressList;

这是我的地址实体类的一部分

public class Address implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
private String city;
@ManyToOne
private User user;

我使用 EntityManager 来保存我的对象,它工作得很好。但是,例如,当我尝试执行“DELETE FROM USER WHERE USER.ID = 1”时,我的 NetBeans IDE 返回以下错误

[异常,错误代码 30.000,SQLState 23503] 表“USER”上的 DELETE 导致键 (1) 上的外键约束“ADRSSUSERID”发生冲突

那么,问题出在哪里呢?我尝试了一切来解决这个问题。感谢您的帮助。

最佳答案

如果 address 记录的所有者指向 user 表,则 id=1 的用户必须是所有者至少1 地址,因此删除用户将使这些地址记录成为孤立记录。

您有两种选择来处理这种情况:

  1. 在删除用户之前,您需要验证该用户是否是任何地址的所有者,如果是,则拒绝删除,或者删除该用户作为这些地址的所有者的身份。我推荐此选项,因为它可以让您最大程度地控制流程。

  2. 您可以使用删除级联选项定义所有者关系,这将导致在您删除用户时删除给定用户所属的地址。由于用户和地址之间存在另一种关系,因此我不会使用此解决方案,因为删除用户可能会导致地址和其他用户的链式删除。

关于java - 表 'USER' 上的 DELETE 导致外键违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48105132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com