1

ここに画像の説明を入力してください

RoleとRightの2つのテーブルがあり、多対多のマッピングの結果として、hibernateは1つのテーブルrole_rightを作成しました。

ここで、 RoleNameに対応するすべてのRightNameを個別に取得したいと思います。

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",joinColumns=@JoinColumn(name="Role_Id"),
            inverseJoinColumns=@JoinColumn(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()

このクエリは私が望むものに非常に近いです

String query = "select Role_Id、RightName FROM userrights join role_right on" + "userrights.RightID = role_right.Right_Id";

しかし、さらに何をすべきかわからない

4

1 に答える 1

1

まず、物事を明確にするために、エンティティとフィールドの名前を変更することから始めます。

  • UserRole、という名前の権利のコレクションを使用して...rights
  • UserRight(sなし)、...という名前の役割のコレクション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();

また、返されるリストの各Object []要素には、役割名と正しい名前の2つの要素が含まれています。このクエリでは、権限を持たないロールは返されないことに注意してください。

これはすべて、 Hibernateのドキュメントで非常によく説明されています。それを読んで。

于 2012-06-03T19:43:54.320 に答える