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

当我为这五个表创建 JPA 实体时,我在用户实体中获得了 UserRoleRels 列表,但我需要该用户的权限列表。因此,用户实体中应该有一个 List permList。

我是 JPA 的新手,不知道如何使用注释来实现这一点?

4

1 回答 1

0

User由于和之间没有直接关系Permission,因此User没有permList集合属性是正确的。

假设您的 IDE 已根据您的表正确创建了实体,那么您的类中没有ManyToMany注释,而只有OneToManyManyToOne. 这使得获取权限集合有点麻烦:

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) 创建更简单的实体类,(2) 避免为关系表创建实体类,(3) 使用ManyToMany注释。通过该更改,您将能够更轻松地以更易读的方式访问权限:

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

有用的链接:EclipseLink 用户指南JPA Wikibooks

于 2012-09-14T10:41:11.910 回答