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控制。
我正在尝试为一个企业实体建模,其中所述企业可以有多个 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控制。