首页 > 解决方案 > 具有 4 个连接表的 4 个表的 JPA 实体关系

问题描述

我们有一个现有的旧 Java 应用程序,它使用带有 JDBC 的本机 sql 查询。我需要使用 JPA + eclipselink 替换 dao 层。我已经使用 eclipse 生成了实体,但我不知道生成的实体是否针对一种特定情况进行了优化。在下图中,我代表了我正在努力解决的表格

相关表格的图像 注意:表格AppFunc的内容不可使用此应用程序进行编辑。

应用程序中的管理员可以在 ihm 中创建角色。角色保存在角色表中。管理员可以通过从App表加载的列表中进行选择,将一个或多个应用程序与创建的角色相关联。保存时,角色和所选应用程序之间的关系将插入到表RoleApp中。

对于每个选定的应用程序,管理员可以使用AppFunc上的连接选择从Func表加载的一个或多个函数。保存时,角色、所选应用程序和归属于应用程序的功能之间的关系将插入到表RoleFuncApp中。

最后,管理员可以为每个功能创建一个或多个权限。保存时,权限将插入到Perm表中,角色、应用程序、函数和创建的权限之间的关系将插入到表RoleAppFuncPerm中。

注意:角色与用户是一对一的关系。应用程序中的每个用户都有一个由管理员赋予的角色。

生成的实体将在两种情况下使用。第一种情况是管理员创建或管理如上所述的角色。在这种情况下,通过保存角色,下表将更新RoleRoleAppRoleAppFuncRoleAppFuncPermPerm

第二种情况是用户登录应用程序时。根据其角色,用户只能访问附加到其角色的选定应用程序。在每个应用程序中,他只能访问选定的功能,并且对于每个功能,他只能访问该功能的权限。

对于第二种情况,如果我可以在Role.java实体中有一个List apps,其中只包含与RoleApp中的用户角色相关的应用程序,我会很高兴。并且App.java具有List 函数,其中仅包含与RoleAppFunc中的角色和应用程序相关的函数。最后,具有List 权限的Func.java仅包含与RoleAppFunPerm中的角色、应用程序和函数相关的权限。目标是仅将这些列表用作只读来管理应用程序中角色的访问、功能和权限。

对于第一种情况,我需要一种在Role.java中与表RoleRoleAppRoleAppFuncRoleAppFuncPermPerm建立关系的方法。这将允许我级联插入/更新/删除角色和(应用程序、功能和权限)之间的关系。

当我做entityManager.persist(role)第一种情况时,有没有人知道在每个 java 实体中创建的关系以进行良好的插入/更新?

对于第二种情况,最好的 JPQL 查询是什么(加载一个只包含与之相关的应用程序、功能和权限的角色)?

标签: javahibernatejpaeclipselinkhibernate-mapping

解决方案


推荐阅读