我有 3 个实体。 用户,项目和角色。 可以将用户分配给具有某些角色的多个项目。 用户 GEORGE 可以在 PROJECT-B上的 PROJECT-A 和 MANAGER 角色中拥有 ADMIN 角色/ strong>即可。如何使用双向关联映射这些实体。
*关系可以用以下方式描述。
USER可以通过角色拥有许多项目。
可以为特定用户为0个或多个项目分配角色。*
是否可以使用 JOIN-TABLE 。
答案 0 :(得分:1)
如果用户不能在项目中拥有多个角色,只需将@ManyToOne项目映射到您的用户,并将角色关系驻留在您的Project类中。
class User {
@OneToMany (mappedBy = "projects")
List<Project> projects;
[...]
}
class Project {
@ManyToOne
User user;
Role userRole;
[...]
}
然而,这确实忽略了将多个用户分配到一个项目的可能性,您没有说明,但我认为应该是可能的。
在Google或您最喜爱的搜索引擎上查看Hibernate Annotations是双向的(BI-WINNING!)。
这里没有真正详细说明,看到OP只有29%的接受率..
欢呼答案 1 :(得分:1)
您需要引入第四个实体(我们称之为Right
),它告诉特定用户在特定项目中具有特定角色。因此,您将以下列关联结束:
RIght实体将映射到具有三个外键(对用户,角色和项目)的表,而元组(userId, projectId, roleId)
应该是唯一的。
您需要使用专用查询(或Java方法)来查找项目用户的角色:
public class User {
// ...
public Set<Role> getRolesForProject(Project project) {
Set<Role> result = new HashSet<Role>();
for (Right right : rights) {
if (right.getProject().equals(project)) {
result.add(right.getRole());
}
}
return result;
}
}
或者,在HQL中:
select role from Right right
inner join right.role role
where right.user = :user
and right.project = :project