ロールを持つユーザーと、ロールを持つことができるグループを持つユーザーがいます。ユーザーが直接的または間接的に持っているすべてのロールを取得する簡単な方法が必要です。
私は次のようなことを考えています:
@Entity
@Table(name = "USER")
public class User{
@Id
private Integer id;
@OneToMany
@JoinTable(name = "USER_ROLES", joinColumns = @JoinColumn(name = "USER_ID"),
inverseJoinColumns = @JoinColumn(name = "ROLE_ID") )
private List<Roles> roles;
@ManyToOne
private List<Group> group;
}
@Entity
@Table(name = "GROUP")
public class Group{
@Id
private Integer id;
@OneToMany
@JoinTable(name = "USER_ROLES", joinColumns = @JoinColumn(name = "GROUP_ID"),
inverseJoinColumns = @JoinColumn(name = "ROLE_ID") )
private List<Roles> roles;
}
@Entity
@Table(name = "ROLE")
public class Role{
@Id
private Integer id;
@Column
private String name;
}
...しかし、この方法では 2 つの手順が必要です。最初に直接の役割を取得し、次に間接的な役割を取得し、2 つのコレクションをマージする必要があります。これを行うためのより簡単または便利な方法はありますか?
SQL からこれを行うのは簡単です。
USER USER_ROLES ROLE
---- ---------- ----
ID USER_ID ID
GROUP_ID GROUP_ID NAME
ROLE_ID
SELECT *
FROM USER u
JOIN USER_ROLES u_r ON (u.ID = u_r.USER_ID)
JOIN USER_ROLES g_r (u.GROUP_ID = u_r.GROUP_ID);