我有5张桌子:
用户名(PK)
ROLE_ID(PK)
role_name
perm_id(PK)
perm_name
ur_id(PK)
用户名(FK) - > user.username
role_id(FK) - > role.role_id
rp_id(PK)
role_id(FK) - > role.role_id
perm_id(FK) - > Permissions.perm_id
当我为这五个表创建JPA实体时,我在User实体中获得了UserRoleRels列表,但我需要该用户的权限列表。所以,应该有一个 列出用户实体中的permList。
我是JPA的新手,不知道如何使用注释实现这一目标?
答案 0 :(得分:0)
由于User
和Permission
之间没有直接关系,User
没有permList
集合属性是正确的。
假设您的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_rels
和Role_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();
}