JPA实体中的多对多关系
我有5张桌子: 用户: 用户名(PK) 角色: 角色id(主键)JPA实体中的多对多关系,jpa,many-to-many,Jpa,Many To Many,我有5张桌子: 用户: 用户名(PK) 角色: 角色id(主键) 角色名称 权限: perm_id(PK) perm_名称 用户角色关系: 您的id(主键) 用户名(FK)->user.username role\u id(FK)->role.role\u id 角色关系: rp_id(PK) 角色id(FK)->角色。角色id perm\u id(FK)->Permissions.perm\u id 当我为这五个表创建JPA实体时,我得到了用户实体中的UserRoleReles列表,但我需要该
角色名称 权限: perm_id(PK)
perm_名称 用户角色关系: 您的id(主键)
用户名(FK)->user.username
role\u id(FK)->role.role\u id 角色关系: rp_id(PK)
角色id(FK)->角色。角色id
perm\u id(FK)->Permissions.perm\u id 当我为这五个表创建JPA实体时,我得到了用户实体中的UserRoleReles列表,但我需要该用户的权限列表。所以,应该有一个 列出用户实体中的列表
我是JPA新手,不知道如何使用注释实现这一点?由于
用户
和权限
之间没有直接关系,因此用户
没有permList
集合属性是正确的
假设IDE已根据表正确创建实体,则类中没有manytomy
注释,只有OneToMany
和manytomone
。这使得获取权限集合有点麻烦:
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();
}
}
如果在许多关系表中没有额外的属性(在您的案例中是
User\u role\u rels
和role\u perm\u rels
),您可以删除这两个表的PK字段。这将允许您的IDE:(1)创建更简单的实体类,(2)避免为关系表创建实体类,(3)使用manytomy
注释。通过该更改,您将能够以更容易阅读的方式访问权限:
String userName = "";
User myUser = entityManager.find(User.class, userName);
for (Role r : myUser.getRoleList()) {
List<Permission> pl = r.getPermissionList();
}
String userName=”“;
User myUser=entityManager.find(User.class,用户名);
对于(角色r:myUser.getRoleList()){
List pl=r.getPermissionList();
}
有用的链接: