User、Center、Profile という 3 つのエンティティがあるため、ユーザーは所属するセンターに応じて異なるプロファイルを持ちます。したがって、*user_center_profile* と呼ばれる 3 つのエンティティをリンクするテーブルがあります。
次に、プロファイルにリンクされた Permission と呼ばれる別のエンティティがあるため、プロファイルにはいくつかの権限があります。
メイン エンティティはユーザーであるため、次のようにマッピングします。
@Entity
@Table(name = "profile")
public class Profile implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idprofile")
private Long idProfile;
@Column(name = "codprofile")
private String codProfile;
@Column(name = "desprofile")
private String desProfile;
@OneToMany
@JoinTable(name = "profile_permission", joinColumns = { @JoinColumn(name = "idProfile") }, inverseJoinColumns = { @JoinColumn(name = "idPermission") })
private List<Permission> permissions = new ArrayList<Permission>();
/* getters and setters */
}
@Entity
@IdClass(CenterProfileId.class)
@Table(name = "user_center_profile")
public class CenterProfile implements Serializable {
@Id
@ManyToOne
private Center center;
@Id
@ManyToOne
private Profile profile;
/* getters and setters */
}
@Embeddable
public class CenterProfileId implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name = "idCenter")
private Center center;
@ManyToOne
@JoinColumn(name = "idProfile")
private Profile profile;
/* getters, setters, equals, hashcode */
}
@Entity
@Table(name = "user")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idUser")
private Long idUser;
@Column(name = "codUser")
private String codUser;
/* other properties */
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_center_profile", joinColumns = { @JoinColumn(name = "idUser") }, inverseJoinColumns = {
@JoinColumn(name = "idCenter"), @JoinColumn(name = "idProfile") })
private List<CenterProfile> centersProfileUser = new ArrayList<CenterProfile>();
@Transient
private Center selectedCenter;
/* getters, setters */
}
問題は、ある時点で、特定のユーザーが持っているすべての権限を収集する必要があるということです...いくつかのことを試してみましたが、遅延読み込みエラー、セッションなしまたはセッション終了エラー、同時バッグの読み込みの問題が発生しました...
プレーンな SQL クエリを作成しようとしても、同じエラーが発生しました...
このために DetachedCriteria を作成する方法がわかりません。また、例外が発生するかどうかもわかりません..
私のアプリはさまざまな「センター」に接続できます。ログインすると、接続したいセンターを選択できますが、ログインすると、センターを変更することもできます...したがって、変更すると、権限を再計算する必要があります...そのため、そのアクセス許可のリストを取得する必要があります..
どうすればこれを適切な方法で行うことができますか?