Java Hibernate中多层多对多关系的处理

Java Hibernate中多层多对多关系的处理,java,hibernate,orm,Java,Hibernate,Orm,我有三个实体: 使用者 角色,以及 对 每个用户都有几个角色,每个角色都有几个权限。类定义如下所示: @Entity @Table(name="...") public class User { ... @ManyToMany @JoinTable(...) private List<Role> UserRoles; } ... @Entity @Table(name="...") public class Role{ ...

我有三个实体:

  • 使用者
  • 角色,以及
  • 每个
    用户
    都有几个
    角色
    ,每个
    角色
    都有几个
    权限
    。类定义如下所示:

    @Entity
    @Table(name="...")
    public class User {
        ...        
        @ManyToMany
        @JoinTable(...)
        private List<Role> UserRoles; 
    }
    ...
    @Entity
    @Table(name="...")
    public class Role{
        ...        
        @ManyToMany
        @JoinTable(...)
        private List<Right> RoleRights; 
    }
    

    我也做了(2)类似的工作,即填充角色的中间列表,以获得用户和权限之间的关系。我想知道这是一个好的实践,还是有更有效的方法来完成任务。

    是的,Spring Security中已经实现了逻辑。

    在每个实体中都应该有双向映射。
    // some method in the data access layer
    public List<User> GetUser(){
        ...
        userList = (List<User>) someHibernateCriteria.list();
        if(userList != null && userList.size() > 0)
        {
            for(User user : userList)
            {
                Hibernate.initialize(user.getUserRoles());
                for(Role role : user.getUserRoles())
                {
                    Hibernate.initialize(role.getRoleRights());
                }
            }
        }
    
        return userList;
    }
    ...
    
    <td>
        ${user.stringDescription}
    </td>
    <td>
        <ul>
        <c:forEach items="${user.userRoles}" var="role">
            <c:forEach items="${role.roleRights}" var="right">
                <li>${right.stringDescription}</li>
            </c:forEach>
        </c:forEach>
        </ul>
    </td>