2012-06-03 2 views
0

enter image description hereКак читать данные с помощью Hibernate после многих многих отображения

У меня есть две таблицы Роль и справа, и Hibernate создали таблицу 1 role_right в результате многие ко многим картографирования.

Теперь я хочу, чтобы получить все RightName, соответствующий RoleName как отдельно

admin--> create user, data entry, login, logout 

data entry operator--> data entry, logout, login 

data analyst--> data analysis, logout, login 

Помогите мне решить эту проблему. Вот мой код

UserRole класс

@Entity 
@Table(name="UserRole") 
public class UserRole implements Serializable { 

    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="RoleID", unique=true, nullable=false) 
    private int roleId; 
    @Column(name="RoleName", nullable=false) 
    private String roleName; 
    @Column(name="RoleRight") 
    private String roleRight; 

    @ManyToMany 
    @JoinTable(name="Role_Right",[email protected](name="Role_Id"), 
      [email protected](name="Right_Id")) 
    private Collection<UserRights> userRoleMapping = new ArrayList<UserRights>(); 

    public Collection<UserRights> getUserRoleMapping() { 
     return userRoleMapping; 
    } 

    public void setUserRoleMapping(Collection<UserRights> userRoleMapping) { 
     this.userRoleMapping = userRoleMapping; 
    } 

    public String getRoleRight() { 
     return roleRight; 
    } 

    public void setRoleRight(String roleRight) { 
     this.roleRight = roleRight; 
    } 

    public int getRoleId() { 
     return roleId; 
    } 

    public void setRoleId(int roleId) { 
     this.roleId = roleId; 
    } 

    public String getRoleName() { 
     return roleName; 
    } 

    public void setRoleName(String roleName) { 
     this.roleName = roleName; 
    } 
} 

UserRole класс

@Entity 
@Table(name="UserRights") 
public class UserRights implements Serializable { 

    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="RightID", unique=true, nullable=false) 
    private int rightId; 
    @Column(name="RightName", nullable=false) 
    private String rightName; 

    @ManyToMany(mappedBy="userRoleMapping") 
    private Collection<UserRole> userRightsMapping = new ArrayList<UserRole>(); 

    public Collection<UserRole> getUserRightsMapping() { 
     return userRightsMapping; 
    } 

    public void setUserRightsMapping(Collection<UserRole> userRightsMapping) { 
     this.userRightsMapping = userRightsMapping; 
    } 

    public int getRightId() { 
     return rightId; 
    } 

    public void setRightId(int rightId) { 
     this.rightId = rightId; 
    } 

    public String getRightName() { 
     return rightName; 
    } 

    public void setRightName(String rightName) { 
     this.rightName = rightName; 
    } 
} 

Я попробовал некоторые вещи, как этот

session.getUserRightsMapping() 

этот запрос очень близко к тому, что я хочу

Строка query = "select Role_Id, RightName FROM userrights join role_right on" + "userrights.RightID = role_right.Right_Id";

, но не знает, что делать дальше

+0

Что вы пробовали? Как насчет вызова 'role.getRights()' и итерации через каждое право, чтобы получить его имя? –

+0

Я добавил свой код в вопрос, пожалуйста, проверьте его – Androider

ответ

1

Прежде всего, чтобы сделать вещи яснее, я хотел бы начать с переименования объектов и полей:

  • UserRole с коллекцией прав по имени ... rights
  • UserRight (без с), с набором ролей, названных ... roles

Теперь, самое простое, что нужно сделать, это просто получить все роли, и получать права каждой роли в одном запросе:

String hql = "select role from UserRole role left join fetch role.rights"; 
List<UserRole> roles = session.createQuery(hql).list() 
// now you can iteratr through the roles, and for each role, iterate through its rights 

Если вы действительно просто хочу, чтобы все role_name/right_name ассоциации, то используйте следующий код:

String hql = "select role.name, right.name from UserRole role" 
      + " inner join role.rights right"; 
List<Object[]> rows = session.createQuery(hql).list(); 

и каждый объект [] элемент возвращаемого списка содержит два элемента: имя роли и правильное название. Обратите внимание, что роли, которые не имеют права, не возвращаются этим запросом.

Все это очень хорошо объяснено в Hibernate documentation. Прочтите.

Смежные вопросы