2011-03-22 62 views
0

我有實體。 用戶,項目和角色。 用戶可以分配給多個具有某些角色的項目。 用戶GEORGE可以PROJECT-BPROJECT-AMANAGER作用ADMIN作用。如何使用雙向關聯映射這些實體。休眠多協會問題

*關係可以用以下方式描述。

用戶可以通過角色擁有許多項目。

的角色可以被分配到0以上的項目爲特定用戶。*

是否有可能與JOIN-TABLE

回答

1

你需要引入第四實體,(我們稱之爲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 
1

如果用戶在一個項目中不能擁有多個角色,只需將@ManyToOne Projects映射到您的用戶,並讓角色關係駐留在您的Project類中。

class User { 
    @OneToMany (mappedBy = "projects") 
    List<Project> projects; 
    [...] 
} 

class Project { 
    @ManyToOne 
    User user; 
    Role userRole; 
    [...] 
} 

這不但是忽視的可能性有多個用戶分配到一個項目,你沒有狀態,但我相信應該是一種可能性。

只需在Google或您最喜愛的搜索引擎上查找Hibernate Annotations雙向(BI-WINNING!)。

真的不細講這裏,看到OP只有29%的接受率..

歡呼

+0

謝謝你..多個用戶可以分配給一個項目。 – Anand 2011-03-22 11:05:04

+0

期待更多的表結構解釋.. – Anand 2011-03-22 11:06:06