我有两个实体,我有一个独特的问题。
实体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;
}
我不认为这是一个双向关系,实体a对实体b是不同的对象。当我进行搜索并返回EntityA时,我得到一个EntityB,它包含一个具有所有空属性的EntityA。我不知道如何做到这一点的正确映射(甚至是术语)。当实体试图从搜索中检索时,我得到一个StackOverflow。
这是一个可能更有意义的文本描述。患者(EntityA)有一个负责他们的Person (EntityB)。该Person可以包含一个类型为Patient (EntityA)的Person。所以A指向B,而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;
...
}
我还建议你分析一下这种关系是否真的是一对一的,这在现实世界中是很少见的。在我的例子中,关系可以很容易地是多对一/多对一,员工监督多个其他员工。
@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;
...
}