0

ロールを持つユーザーと、ロールを持つことができるグループを持つユーザーがいます。ユーザーが直接的または間接的に持っているすべてのロールを取得する簡単な方法が必要です。

私は次のようなことを考えています:

@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);
4

1 に答える 1

0

これは一般的に悪い考えです。

  • aUserがaと同じIDを持っている場合Group、競合が発生します。
  • データベースで外部キー制約を利用することはできません。
  • 他の奇妙なことが最終的に起こります。
  • これをJPAに実装するのは難しく、エラーが発生しやすくなります。

RoleGroupRoleおよびととの間で別々のテーブルを使用しUserます。GroupUser

于 2012-08-23T09:30:55.083 に答える