当我尝试在名为" 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)
那么,问题是什么?我尝试了一切来解决这个问题。谢谢你的帮助。
答案 0 :(得分:0)
如果getElementById
记录的所有者指向address
表,则user
的用户必须是至少1 id=1
的所有者,因此请删除该用户会使那些地址记录孤儿。
您有两种方法可以处理这种情况:
在删除用户之前,您需要验证它是否是任何地址的所有者,如果是,则拒绝删除或删除该用户作为这些地址的所有者。我建议使用此选项,因为它可以让您最大程度地控制该过程。
您可以使用address
选项定义所有者关系,这会导致在删除用户时删除给定用户所有者的地址。由于您在用户和地址之间存在另一种关系,因此我不会使用此解决方案,因为删除用户可能会导致链地删除地址和其他用户。