JPA:如何设置具有多个 children 和多个 parents 相同实体类型的实体?

JPA: How do I set up an entity with several children and several parents of same entity type?

我正在尝试为一个企业实体建模,其中所述企业可以有多个 parent 企业和多个 child 企业。我不确定哪种关系适合,甚至不确定哪种映射合适。我熟悉 SQL 但对 Java 中的 ORM 不熟悉。

我的想法是一个企业可以有很多或者nonechild人,一个企业可以有很多或者noneparent人。因此,我尝试将两者设置为 OneToMany 和 OneToMany,两者都导致此错误:Illegal use of mappedBy on both sides of the relationship.

实施:

@Entity
public class Business{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "parentOrgs")
    private Collection<Business> chlidOrgs;

    @OneToMany(mappedBy = "chlidOrgs")
    private Collection<Business> parentOrgs;

    // --- Getters and setters below ---

我在这里有什么不明白的?非常感谢任何帮助。

您当前的映射在句法上不正确,因为关系中只有一方可以是拥有方。拥有方是由 mappedBy 属性的值定义的字段。更详细的解释可以从here中找到。

也从一侧删除 mappedBy 并不能解决问题,因为 OneToMany 的对应项必须是 ManyToOne。从两侧移除它给我们留下了两个单向关联,这也不是我们所需要的。

因为每个 Business 可以有多个 parents 并且似乎更喜欢能够直接导航到孩子,解决方案是使用双向 ManyToMany:

@Entity
public class Business {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @ManyToMany(mappedBy = "parents")
  private Collection<Business> childrens;

  @ManyToMany
  private Collection<Business> parents;
}

从数据库的角度来看,这意味着以下 tables:

Business(id)
Business_Business(childrens_id, parents_id)

必要时,连接的名称table和列可以通过JoinTable控制。