【发布时间】:2015-12-03 02:28:18
【问题描述】:
我对 @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 中有一个list of employees,我在上面指定了@JoinColumn,所以它会在employee table 中添加department_id FK。
但是对于双向关系,我将定义类
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;
}
但是对于双向关系,为什么我需要在Employee class 中将@JoinColumn 放在department 上,并在Department class 中将@MappedBy 放在list of employees 上?
更新
那么@MappedBy 和@JoinColumn 是如何工作的呢?
【问题讨论】:
-
为什么第二个
Department映射没有@Table和@Entity注释? -
我忘记复制了。感谢@JordiCastilla 注意到它。
标签: java hibernate foreign-keys entity-relationship