[英]Hibernate Mapping OneToOne
我有两个与我有独特问题的实体。
实体A可以包含一个实体B实体B可以包含一个实体A(但不能包含上述一个)
@Entity
@Table(name = "ENTITYA")
public class EntityA {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long entityAId;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "entityAId", nullable = true)
private EntityB entityB;
...
}
和
@Entity
@Table(name = "ENTITYB")
public class EntityB {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long entityBId;
private Long officeId;
private Long name;
@OneToOne
private EntityA entityA;
}
我不认为这是双向关系,entityB上的entityA是不同的对象。 当我进行搜索并取回EntityA时,我得到一个EntityB,其中包含具有所有空属性的EntityA。 我不知道如何执行此操作的正确映射(甚至是术语)。 当尝试从搜索中检索实体时,出现StackOverflow。
这是可能更有意义的文字描述。 患者(实体A)有一个负责他们的人(实体B)。 该人员可以包含患者(EntityA)类型之一。 因此,A指向B,后者引用了另一个A。
您确定需要两个实体吗?
让我们想象下一种情况:
1)一名雇员只能有一名主管。 主管只能负责一名员工。 主管是一名员工。
2)主管也受到另一名员工的监督。
这给了我们一个实体和一个自我定位的关系。
@Entity
@Table(name = "EMPLOYEE")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
@JoinColumn(name = "SUPERVISOR", referencedColumnName = "id")
private Employee supervisor;
@OneToOne(mappedBy="supervisor")
private Employee responsibility;
...
}
我也建议您分析一下这些关系是否确实是“一对一”,这在现实世界中很少见。 在我的示例中,这种关系很容易是ManyToOne / OneToMany,而员工负责监督其他多个员工。
@Entity
@Table(name = "EMPLOYEE")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "SUPERVISOR", referencedColumnName = "id")
private Employee supervisor;
@OneToMany(mappedBy="supervisor")
private List<Employee> responsibilities;
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.