1 回答

TA貢獻1898條經驗 獲得超8個贊
如果沒有完整的代碼,很難弄清楚發生了什么。但總的來說,您應該考慮以下概念:
帶注釋的實體JoinTable是關系的所有者。這意味著如果您啟用Cascade.Merge“Owner”,向其中添加新記錄,則會向中間表添加另一條記錄。
一個例子
Role實體:
{
@ManyToMany(cascade = {CascadeType.MERGE})
@JoinTable(name = "tb_role_privilege",
joinColumns = @JoinColumn(name = "role_id"),
inverseJoinColumns = @JoinColumn(name = "privilege_id"))
private Set<Privilege> privileges = new HashSet<>();
}
和Privilege實體:
{
@ManyToMany(mappedBy = "privileges")
private Set<Role> roles = new HashSet<Role>();
}
這里,Role是關系的所有者。當您使用 創建角色對象 并使用 ,id=0填充其權限列表并ids=[0 1 2]調用 時save,它會將角色記錄插入到 中tb_role,并且還會將 (0,0)、(0,1) 和 (0,2) 插入到中間表tb_role_privilege,但它不會向 中插入任何內容tb_privilege。因此,您需要在tb_privilege插入角色記錄之前插入權限記錄。
這是一種良好且簡單的m2m人際關系方法。如果它不滿足您的場景,請為您的代碼提供更多信息。
添加回答
舉報