我對@JoinColumn和@MappedBy的工作感到困惑。@JoinColumn和@MappedBy如何工作
考慮下面的例子 這裏是我係類單向關係
@Entity
@Table(name = "DEPARTMENT")
public class Department {
@Id
@Column(name = "DEPARTMENT_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer departmentId;
@Column(name = "DEPARTMENT_NAME")
private String departmentName;
@Column(name = "LOCATION")
private String location;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "DEPARTMENT_ID")
private List<Employee> employees = new ArrayList<>();
}
我Department class
在我所指定@JoinColumn
所以它會把department_id
FK在employee table
有list of employees
。
而是雙向的關係,我會定義類,如
Department.java
@Entity
@Table(name = "DEPARTMENT")
public class Department {
@Id
@Column(name = "DEPARTMENT_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer departmentId;
@Column(name = "DEPARTMENT_NAME")
private String departmentName;
@Column(name = "LOCATION")
private String location;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "department")
private List<Employee> employees = new ArrayList<>();
}
Employee.java
@Entity
@Table(name = "EMPLOYEE")
public class Employee {
@Id
@SequenceGenerator(name = "emp_seq", sequenceName = "seq_employee")
@GeneratedValue(generator = "emp_seq")
@Column(name = "EMPLOYEE_ID")
private Integer employeeId;
@Column(name = "EMPLOYEE_NAME")
private String employeeName;
@ManyToOne
@JoinColumn(name = "DEPARTMENT_ID")
private Department department;
}
但雙向關係,爲什麼我需要把@JoinColumn
超過department
在Employee class
和Department class
寫@MappedBy
超過list of employees
?
更新
那麼@MappedBy和@JoinColumn如何工作?
爲什麼2nd'Department'映射沒有'@ Table'和'@ Entity'註解? –
我忘了複製它。感謝@JordiCastilla注意它。 – eatSleepCode