【问题标题】:hibernate: ternary association mappinghibernate:三元关联映射
【发布时间】:2011-05-23 20:23:54
【问题描述】:

技术说明: 休眠注释 - 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 不适用于用户角色映射数据。

一个解决方案可能是 Map>,但我怀疑我是否可以将嵌套集合与 hibernate 一起使用。

请帮帮我!

如果问题无法理解或无法表达,请告诉我。

【问题讨论】:

    标签: java hibernate map hibernate-annotations


    【解决方案1】:

    我的建议是在您的领域模型RoleAssignment 中引入一个新概念:

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

    实体UserBranchRole 应该与RoleAssignment 具有1:N 关系。例如:

    class User { 
      private Set<RoleAssignment> roleAssignemnts;
    }
    

    【讨论】:

    • 我想避免创建一个不直接映射到实体的类。您的解决方案是可行的,但除了角色、用户、分支之外,还有其他可能的方法避免创建更多类。就像使用一些集合或集合的一些包装一样。感谢您的回答。
    • @Maddy.Shik Hibernate 似乎支持三元关联。请参阅docs.jboss.org/hibernate/core/3.6/reference/en-US/html/…。这对你有用吗?
    • @Entity public class Company { @Id int id; ... @OneToMany // 单向 @MapKeyJoinColumn(name="employee_id") Map contracts;在这个例子中,如果 Employee 有多个合约,它将无法工作,这在三元关联中很可能发生。
    • 在这种情况下用户映射会是什么样子?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多