多对多JPA注释超过两个表

时间:2013-11-22 14:57:04

标签: jpa annotations mapping relational

目前我有三张桌子。 用户,角色和机构。

如您所知,用户和角色有很多关系。 (一个用户可以拥有多个角色,一个角色可以拥有多个用户)。

创建多个注释,如下所示。

#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>();

但后来我意识到用户可以在一个机构中扮演角色,在另一个机构中扮演不同的角色,或者在不同的机构中扮演相同的角色。我该如何设置这种关系?

1 个答案:

答案 0 :(得分:1)

首先,您的简单多对多映射是错误的。双向关联的一端必须是反面,使用mappedBy属性。例如:

@ManyToMany(mappedBy = "roles")
private Set<User> users = new HashSet<User>();

现在回答你的问题,你只需要一个实体。我们称之为参与。参与包含给定机构中给定用户的角色。因此,您有以下位置关联:

  • 用户 - OneToMany - 参与
  • 参与 - ManyToOne - 角色
  • 参与 - ManyToOne - 机构