hibernate 这个函数的作用是什么?

4ktjp1zp  于 2022-12-29  发布在  其他
关注(0)|答案(5)|浏览(170)

我理解hib @JoinTable注解,但是我不理解inverseJoinColumns,它是用来做什么的?
例如:

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
 @JoinTable(name = "stock_category", catalog = "mkyongdb", joinColumns = {
        @JoinColumn(name = "STOCK_ID", nullable = false, updatable = false) },
        inverseJoinColumns = { @JoinColumn(name = "CATEGORY_ID",
                nullable = false, updatable = false) })

 public Set<Category> getCategories() {
    return this.categories;
}
7cjasjjr

7cjasjjr1#

在javadoc中,它表示:
引用不拥有关联的实体的主表的连接表的外键列
通俗地说,Category的列将用作当前实体和Category之间的JoinTable关系的一部分。
如果您没有在@JoinTable注解中指定joinColumnsinverseJoinColumns,持久性提供器将假定主键到主键的连接关系,并且默认情况下仍然为表中的两个相关实体存储等效的 ID 列。

bejyjqdl

bejyjqdl2#

例如,我们有2种型号:用户和角色。这两个模型之间的关系将是多对多。用户模型:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();

榜样:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Enumerated(EnumType.STRING)
@Column(length = 20)
private ERole name;

joinColumn属性将连接到关系的所有者端,而inverseJoinColumn将连接到另一端

tquggr8v

tquggr8v3#

InverseJoinColumn用于自定义关联类引用变量名的表中的列名。该列充当外键。

eqqqjvef

eqqqjvef4#

joinColumns:分配与实体本身相关的第三个表的列。
inverseJoinColumns:分配与关联实体相关的第三个表的列。

***示例:***假设您有两个表-一个是Mobile(具有字段-mobileIdmobileNamemobileColor),另一个是Person(具有字段-personIdpersonName),其中mobileIdpersonId是这两个表中的主键。现在,我们在'Person'类中添加连接表注解,如下所示:


,这里P_Id是指Person类字段mobileIdMob_Id的主键(其中使用了inverseJoinColumns)是Mobile类字段mobileId的主键。这两个表一起创建第三个连接表My_Third_Table,其中Mob_IdP_Id都充当外键

3duebb1j

3duebb1j5#

我们没有将主表分配给两个表,这就是为什么我们需要对实体使用反向连接列的原因。

相关问题