【问题标题】:Hibernate Multiple Association IssueHibernate 多重关联问题
【发布时间】:2011-03-22 10:48:29
【问题描述】:

我有 3 个实体。 用户、项目和角色。 可以将一个用户分配给具有某些角色的多个项目。 用户 GEORGE 可以在 PROJECT-A 上拥有 ADMIN 角色,在 PROJECT-BMANAGER 角色/强>。如何使用双向关联映射这些实体。

*关系可以用以下方式描述。

一个用户可以通过一个角色拥有多个项目。

一个角色可以分配给特定用户的 0 个或多个项目。*

是否可以使用 JOIN-TABLE

【问题讨论】:

    标签: hibernate jpa many-to-many associations


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      如果用户不能在一个项目中拥有多个角色,只需将@ManyToOne Projects 映射到您的用户,并将角色关系驻留在您的项目类中。

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

      但是,这确实忽略了将多个用户分配给一个项目的可能性,您没有说明,但我认为应该是这种可能性。

      只需在 google 或您最喜欢的搜索引擎上查找 Hibernate Annotations an Bi-directional (BI-WINNING!)。

      这里就不详细说了,看到OP只有29%的接受率..

      干杯

      【讨论】:

        猜你喜欢
        • 2014-07-10
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 2015-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多