我理解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;
}
5条答案
按热度按时间7cjasjjr1#
在javadoc中,它表示:
引用不拥有关联的实体的主表的连接表的外键列
通俗地说,
Category
的列将用作当前实体和Category
之间的JoinTable
关系的一部分。如果您没有在
@JoinTable
注解中指定joinColumns
和inverseJoinColumns
,持久性提供器将假定主键到主键的连接关系,并且默认情况下仍然为表中的两个相关实体存储等效的 ID 列。bejyjqdl2#
例如,我们有2种型号:用户和角色。这两个模型之间的关系将是多对多。用户模型:
榜样:
joinColumn属性将连接到关系的所有者端,而inverseJoinColumn将连接到另一端
tquggr8v3#
InverseJoinColumn用于自定义关联类引用变量名的表中的列名。该列充当外键。
eqqqjvef4#
joinColumns:
分配与实体本身相关的第三个表的列。inverseJoinColumns:
分配与关联实体相关的第三个表的列。***示例:***假设您有两个表-一个是
Mobile
(具有字段-mobileId
、mobileName
、mobileColor
),另一个是Person
(具有字段-personId
、personName
),其中mobileId
和personId
是这两个表中的主键。现在,我们在'Person'类中添加连接表注解,如下所示:,这里
P_Id
是指Person
类字段mobileId
和Mob_Id
的主键(其中使用了inverseJoinColumns
)是Mobile
类字段mobileId
的主键。这两个表一起创建第三个连接表My_Third_Table
,其中Mob_Id
和P_Id
都充当外键3duebb1j5#
我们没有将主表分配给两个表,这就是为什么我们需要对实体使用反向连接列的原因。