1

私は5つのテーブルを持っています:

ユーザー:

ユーザー名 (PK)

役割:

role_id(PK)
ロール 名

権限:

perm_id(PK)
perm_name

User_role_rels:

ur_id(PK)
ユーザー名(FK) -> user.username
role_id(FK) -> role.role_id

Role_perm_rels:

rp_id(PK)
role_id(FK) -> role.role_id
perm_id(FK) -> Permissions.perm_id

これら 5 つのテーブルの JPA エンティティを作成すると、User エンティティで UserRoleRels のリストを取得しますが、このユーザーの権限のリストが必要になります。したがって、User エンティティには List permList が必要です。

JPA は初めてで、アノテーションを使用してこれを達成する方法がわかりません。

4

1 に答える 1

0

Userと の間に直接的な関係はないので、コレクション プロパティを持たないPermissionのは正しいです。UserpermList

IDE がテーブルに従ってエンティティを正しく作成したと仮定すると、ManyToManyクラスには注釈がなくOneToMany、 とManyToOne. これにより、アクセス許可コレクションを取得するのが少し面倒になります。

String userName = "";
User myUser = entityManager.find(User.class, userName);
for (UserRoleRels urr : myUser.getUserRoleRelsList()) {
    Role r = urr.getRole();
    for(RolePermRels rpr : r.getRolePermRelsList()) {
        Permission p = rpr.getPermission();
    }
}

ManyToMany 関係テーブルに追加のプロパティがない場合 (あなたの場合User_role_relsRole_perm_rels)、両方の PK フィールドを削除できます。これにより、IDE で次のことが可能になります。(1) より単純な Entity クラスを作成する、(2) 関係テーブル用の Entity クラスの作成を回避する、(3)ManyToMany注釈を使用する。その変更により、より簡単に、より読みやすい方法でアクセス許可にアクセスできるようになります。

String userName = "";
User myUser = entityManager.find(User.class, userName);
for (Role r : myUser.getRoleList()) {
    List<Permission> pl = r.getPermissionList();
}

役立つリンク: EclipseLink UserGuideJPA Wikibooks

于 2012-09-14T10:41:11.910 に答える