2010-12-11 93 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