如何在 'One' 端使用 JPA 外键创建 table OneToMany
How to create with JPA foreignkey at 'One' side table OneToMany
我有两个 class 员工和电子邮件,具有关系 OneToMany 和 ManyToOne。
如何使用 JPA table 创建/生成外键列 ex:(email_id) at Employee table ?
this is image ERD Table Employee(OneToMany) & Email
@Entity
@Data
public class Employee {
@Id
private Long id;
private String name;
private String address;
@OneToMany
private List<Email> emailList;
}
@Entity
@Data
public class Email {
@Id
private Long id;
private String email;
@ManyToOne
private Employee employee;
}
设计不正确,外键应始终出现在 one to many
关系中的 many
端。一名员工可以拥有多封电子邮件。 Many
在电子邮件端。一封电子邮件仅与一名员工关联。
想一想,如果一个员工有很多邮件,在tableEmployee
中如何呈现?在提供的设计中,只有 email_id
的员工会有重复的条目,这会有所不同。
但如果反过来,employee_id
在tableEmail
。电子邮件将有多个不同的条目,每个条目将与特定员工相关联。
因此 email_id
不应出现在 Employee
中,而 employee_id
应该出现在 table Email
.
中
您在 Email
class 中添加 @JoinColumn(name="employee _id", nullable=false)
作为:
@Entity
@Data
public class Employee {
...
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "employee")
private List<Email> emailList;
}
@Entity
@Data
public class Email {
...
@ManyToOne
@JoinColumn(name="employee_id", nullable=false)
private Employee employee;
}
Nb:根据设计,外键将只出现在电子邮件中 table
如果您想这样做:
这是代码:
@Entity
@Data
public class Employee {
...
OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "email_id", referencedColumnName = "id")
private Email email;
}
@Entity
@Data
public class Email {
...
//remove this relationship
//@ManyToOne
//@JoinColumn(name="employee_id", nullable=false)
//private Employee employee;
}
我有两个 class 员工和电子邮件,具有关系 OneToMany 和 ManyToOne。
如何使用 JPA table 创建/生成外键列 ex:(email_id) at Employee table ?
this is image ERD Table Employee(OneToMany) & Email
@Entity
@Data
public class Employee {
@Id
private Long id;
private String name;
private String address;
@OneToMany
private List<Email> emailList;
}
@Entity
@Data
public class Email {
@Id
private Long id;
private String email;
@ManyToOne
private Employee employee;
}
设计不正确,外键应始终出现在 one to many
关系中的 many
端。一名员工可以拥有多封电子邮件。 Many
在电子邮件端。一封电子邮件仅与一名员工关联。
想一想,如果一个员工有很多邮件,在tableEmployee
中如何呈现?在提供的设计中,只有 email_id
的员工会有重复的条目,这会有所不同。
但如果反过来,employee_id
在tableEmail
。电子邮件将有多个不同的条目,每个条目将与特定员工相关联。
因此 email_id
不应出现在 Employee
中,而 employee_id
应该出现在 table Email
.
您在 Email
class 中添加 @JoinColumn(name="employee _id", nullable=false)
作为:
@Entity
@Data
public class Employee {
...
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "employee")
private List<Email> emailList;
}
@Entity
@Data
public class Email {
...
@ManyToOne
@JoinColumn(name="employee_id", nullable=false)
private Employee employee;
}
Nb:根据设计,外键将只出现在电子邮件中 table
如果您想这样做:
这是代码:
@Entity
@Data
public class Employee {
...
OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "email_id", referencedColumnName = "id")
private Email email;
}
@Entity
@Data
public class Email {
...
//remove this relationship
//@ManyToOne
//@JoinColumn(name="employee_id", nullable=false)
//private Employee employee;
}