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;
}

我不认为这是一个双向关系,实体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;
  ...
}

最新更新