删除表格' USER'导致外键违规

时间:2018-01-04 23:35:36

标签: java mysql jpa entity eclipselink

当我尝试在名为" USER"的表中删除行时,我遇到了问题。这与表格#34; ADDRESS"有关系。特别是,这是我的用户实体类

的一部分
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来保存我的对象,它运行得很好。但是当我尝试执行&#34; DELETE FROM USER WHERE USER.ID = 1&#34;时,我的NetBeans IDE会向我返回以下错误

[异常,错误代码30.000,SQLState 23503]删除表格&#39; USER&#39;导致违反外键约束&#39; ADRSSUSERID&#39;在关键字(1)

那么,问题是什么?我尝试了一切来解决这个问题。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

如果getElementById记录的所有者指向address表,则user的用户必须是至少1 id=1的所有者,因此请删除该用户会使那些地址记录孤儿。

您有两种方法可以处理这种情况:

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

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