目前我有三张桌子。 用户,角色和机构。
如您所知,用户和角色有很多关系。 (一个用户可以拥有多个角色,一个角色可以拥有多个用户)。
创建多个注释,如下所示。
#In User Table.
@ManyToMany
@JoinTable(name = "USER_ROLES",
joinColumns = {@JoinColumn(name = "USER_ID")},
inverseJoinColumns = {@JoinColumn(name = "ROLE_ID")}
)
private Set<Role> roles = new HashSet<Role>();
#In Role Table.
@ManyToMany
@JoinTable(name = "USER_ROLES",
joinColumns = {@JoinColumn(name = "ROLE__ID")},
inverseJoinColumns = {@JoinColumn(name = "USER_ID")}
)
private Set<User> users = new HashSet<User>();
但后来我意识到用户可以在一个机构中扮演角色,在另一个机构中扮演不同的角色,或者在不同的机构中扮演相同的角色。我该如何设置这种关系?
答案 0 :(得分:1)
首先,您的简单多对多映射是错误的。双向关联的一端必须是反面,使用mappedBy属性。例如:
@ManyToMany(mappedBy = "roles")
private Set<User> users = new HashSet<User>();
现在回答你的问题,你只需要一个实体。我们称之为参与。参与包含给定机构中给定用户的角色。因此,您有以下位置关联: