【发布时间】:2018-06-14 18:23:01
【问题描述】:
当我尝试删除与表“ADDRESS”相关的名为“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'
那么,有什么问题吗?我尝试了一切来解决这个问题。谢谢你的帮助。
【问题讨论】:
-
为什么地址实体中有用户?
-
一个用户可以有一个或多个地址,这很好。但是为什么要在地址表中引用用户 ID?地址表似乎有一个指向用户表的外键,这没有多大意义,并且会导致错误。
-
是的,这是因为地址表中有一个“owner_id”,它是User表中“user_id”的外键。
-
是的,丹,它是这样建模的,因为一个用户可以有多个地址。
-
在这次谈话之后我不确定我的答案,所以我删除了它,但我有兴趣听到更好的答案。似乎您希望删除用户以级联到其地址。如果地址和用户之间存在多对一关系,该怎么做?密钥必须在地址一侧,对吧?
标签: java mysql jpa entity eclipselink