JPA 多对多注解
@ManyToMany
是属性或方法级别的注解,用于定义源实体与目标实体是多对多的关系。
参数 | 类型 | 描述 |
---|---|---|
targetEntity | Class | 源实体关联的目标实体类型,默认是该成员属性对应的集合类型的泛型的参数化类型。 |
mappedBy | String | 用在双向关联中。如果关系是双向的,则需定义此参数(与 @JoinColumn 互斥,如果标注了 @JoinColumn 注解,不需要再定义此参数)。 |
cascade | CascadeType[] | 定义源实体和关联的目标实体间的级联关系。当对源实体进行操作时,是否对关联的目标实体也做相同的操作。默认没有级联操作。该参数的可选值有: CascadeType.PERSIST(级联新建) CascadeType.REMOVE(级联删除) CascadeType.REFRESH(级联刷新) CascadeType.MERGE(级联更新) CascadeType.ALL(包含以上四项) |
fetch | FetchType | 定义关联的目标实体的数据的加载方式。 可选值: FetchType.LAZY(延迟加载,默认) FetchType.EAGER(立即加载) 延迟加载:只有在第一次访问源实体关联的目标实体的时候才去加载。 立即加载:在加载源实体数据的时候同时去加载好关联的目标实体的数据。 |
1. 多对多单向外键关联
|
|
|
|
产生的 DDL 语句(MySQL):
|
|
2. @JoinTable
与 @Table 注解相类似,不同的是,@JoinTable
注解是用于定义关联表,它只能标注在实体类型的成员属性或方法上,常用于多对多或多对一的关联映射。如果没有声明,则使用该注解的默认值。
参数 | 类型 | 描述 |
---|---|---|
name | String | 连接表的名称。 |
catalog | String | 默认为数据库系统缺省的 catalog。 |
schema | String | 默认为用户缺省的 schema。 |
joinColumns | JoinColumn[] | 连接表中的外键列,通过使用 @JoinColumn 注解来声明,该外键参照源实体的主键。 |
inverseJoinColumns | JoinColumn[] | 与 joinColumns 参数作用类似,只不过该外键参照的是目标实体的主键。 |
uniqueConstraints | UniqueConstraint[] | 表的唯一约束(除了由 @Column 和 @JoinColumn 注解指定的约束以及主键的约束之外的约束),通过使用 @UniqueConstraint 注解来声明,仅在允许自动更新数据库表结构的场景中起到作用,默认没有其他额外的约束条件。 |
indexes | Index[] | 表的索引,通过使用 @Index 注解来声明,仅在允许自动更新数据库表结构的场景中起到作用,默认没有其他额外的索引。 |
foreignKey | ForeignKey | 用于生成表时定义 joinColumns 参数的外键约束。 |
inverseForeignKey | ForeignKey | 用于生成表时定义 inverseJoinColumns 参数的外键约束。 |
Course 定义不变,Student 定义改为:
|
|
产生的 DDL 语句(MySQL):
|
|
3. 多对多双向外键关联
类 Student 定义不变,Course 类的定义改为:
|
|
产生的 DDL 语句与多对多单向外键关联产生的一致。