@Entity
@Table(name="empoyee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@ManyToOne
@JoinColumn(name="department_id", referencedColumnName="id")
private Department department;
@ManyToOne
@JoinColumn(name="project_id", referencedColumnName="id")
private Project projects;
@OneToOne(mappedBy="employee")
private ParkingLot parkingLot;
//Other properties,constructors, getters and setters and so on
}
@Entity
@Table(name="department")
public class Department implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToMany(mappedBy="department")
private List<Employee> employees;
//Other properties,constructors, getters and setters and so on}
@Entity
@Table(name="parking_lot")
public class ParkingLot implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToOne
@JoinColumn(name="employee_id",referencedColumnName="id")
private Employee employee;
//Other properties,constructors, getters and setters and so on}
@Entity
@Table(name="project")
public class Project implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToMany(mappedBy="project")
private List<Employee> employees;
//Other properties,constructors, getters and setters and so on
}
Run Code Online (Sandbox Code Playgroud)
如果关系是单向的,那么实际上没有一个拥有方,并且没有任何mappedBy注释.如果关系是双向的,则有一个带有mappedBy注释的一侧 - 另一侧是拥有方.拥有方是拥有这种关系的一方.所以这个术语不适用于ParkingLot拥有其Employee或Employee拥有其ParkingLot,而是像ParkingLot和Employee之间的关系由Employee(或ParkingLot见下文)所拥有.对于ManyToOne,没有mappedBy,所以它总是在OneToMany注释下指定的实体拥有关系(有意义,因为例如项目表不能拥有所有员工的外键)所以对于两个ManyToOne /在您的示例中,OneToMany映射我们无法选择哪一方拥有该关系.在Employee和ParkingLot之间我们有一个选择,我选择了ParkingLot.当给出选择时,它有什么关系?那么,主要区别在于mappedBy具有多种级联.请注意,哪个表具有外键或者关系是否在其自己的表中无关紧要 - JPA支持所有情况(@InverseJoinColumn等).
对于双向映射,没有明确的映射目标和来源,这取决于映射的方式.该术语更适用于单向映射,源端当然是具有映射的实体(可能是目标实体的知识)
4)不适用(除非您将ParkingLot和Employee之间的关系单向化).5)关系的所有者总是"在一个实体上"6)反面
最后说明:"拥有方"令人困惑,例如我们可以设计以便部门拥有其员工,如果我们删除部门,其所有员工也将被删除.这可以通过改变@OneToMany(mappedBy="department")到@OneToMany(mappedBy="department", cascade= CascadeType.REMOVE)那时来说"部门实体拥有其员工实体"真的有意义,但这种关系仍然由Employee实体拥有.