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

时间:2017-04-19 05:41:00

标签: java hibernate orm

我有三个实体:

  1. 用户
  2. 角色,
  3. 每个User都有多个Roles,每个Role都有多个Right。类定义如下:

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

    我想做以下两项任务:

    1. 为每个用户显示权利。
    2. 按用户搜索用户。
    3. 目前我已通过以下方式实施(1):

      // 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;
      }
      ...
      

      显示jsp的代码,循环userList并将每个user放入html table row

      <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>
      

      我也(2)也是如此,即填充中间的角色列表以获取用户和权利之间的关系。我想知道这是一个好的做法,还是有更有效的方法来完成任务。

1 个答案:

答案 0 :(得分:0)

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