Looking for jpa Answers? Try Ask4KnowledgeBase
Looking for jpa Keywords? Try Ask4Keywords

jpa多对多映射


介绍

ManyToMany映射描述了实体之间的关系,其中两者可以与彼此的多个实例相关,并且由@ManyToMany注释定义。

与可以使用实体表中的外键列的@OneToMany不同, ManyToMany需要一个连接表,它将实体相互映射。

参数

注解目的
@TableGenerator 定义在为GeneratedValue批注指定生成元素时可以通过名称引用的主键生成器
@GeneratedValue 提供主键值的生成策略的规范。它可以与Id注释一起应用于实体的主键属性或字段或映射的超类。
@ManyToMany 指定Employee和Project实体之间的关系,以便许多员工可以处理多个项目。
mappedBy="projects" 定义Employee和Project之间的双向关系
@JoinColumn 指定将引用要视为关联所有者的实体的列的名称
@JoinTable 指定数据库中的表,该表将使用外键将员工与项目关系保持在一起

备注

  • @TableGenerator和@GeneratedValue用于使用jpa表生成器自动创建ID。
  • @ManyToMany批注指定Employee和Project实体之间的关系。
  • @JoinTable指定要用作连接表的表的名称jpa使用name =“employee_project”在Employee和Project之间进行多对多映射。这样做是因为没有办法确定jpa多对多映射的所有权,因为数据库表不包含引用其他表的外键。
  • @JoinColumn指定将引用要被视为关联所有者的实体的列的名称,而@ inverseJoinColumn指定关系的反面名称。 (您可以选择任何一方作为所有者。只需确保这些方面的关系)。在我们的例子中,我们选择Employee作为所有者,因此@JoinColumn引用连接表employee_project中的idemployee列,而@InverseJoinColumn引用idproject,它是jpa多对多映射的反面。
  • Project实体中的@ManyToMany注释显示反向关系,因此它使用mappedBy = projects来引用Employee实体中的字段。

这里可以参考完整的例子

多对多映射 相关例子