2010-12-11 100 views
1

Technology說明: 休眠annotation- 3.4.0.GA 的java 1.5休眠:三元關聯映射

:users_roles_branches :USER_ID,ROLE_ID,branch_id

甲用戶分配公司不同分支的不同角色。

現在我有一個java的POJO類

 public class branch 
    { 
       @ManyToMany 
      @JoinTable(name = "users_roles_branches", joinColumns = { @JoinColumn(name="branch_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") }) 
      @MapKeyManyToMany(joinColumns = { @JoinColumn(name = "user_id", unique = false) }) 

       public Map<User, Role> getUserRoleMap() { 
      return userRoleMap; 
      } 
    } 

基本要求是檢索的一個分支分配給不同的用戶角色列表。

問題:由於一個用戶可以爲其分配多個角色,因此映射對用戶角色映射數據無效。

一個解決方案可能是Map>,但我懷疑我是否可以使用hibernate的嵌套集合。

請幫我一把!

如果問題不可理解或不可表現形式,請告訴我。

回答

2

我的建議是在你的域模型RoleAssignment引入一個新的概念:

class RoleAssignment { 
    private User user; 
    private Branch branch; 
    private Role role; 
} 

實體UserBranchRole應該有1:N的關係與RoleAssignment。例如:

class User { 
    private Set<RoleAssignment> roleAssignemnts; 
} 
+1

我想避免創建一個不直接映射到實體的類。你的解決方案是可行的,但有沒有其他可能的方式避免創建除角色,用戶,分支以外的任何其他類。就像使用一些集合或一些收集包裝一樣。謝謝你的回答。 – 2010-12-15 07:53:03

+0

@ Maddy.Shik Hibernate似乎支持三元關聯。請參閱http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections-ternary。這會爲你工作嗎? – 2010-12-16 19:22:01

+0

@實體 public class Company { @Id int id; ... @OneToMany //單向 @MapKeyJoinColumn(名稱= 「EMPLOYEE_ID」) 地圖<僱員,合同>合同; }在這個例子中,如果員工有多個合同,它將不起作用,這在三元關聯中非常可能。 – 2010-12-17 15:36:55