java - 具有 4 个连接表的 4 个表的 JPA 实体关系
问题描述
我们有一个现有的旧 Java 应用程序,它使用带有 JDBC 的本机 sql 查询。我需要使用 JPA + eclipselink 替换 dao 层。我已经使用 eclipse 生成了实体,但我不知道生成的实体是否针对一种特定情况进行了优化。在下图中,我代表了我正在努力解决的表格
注意:表格App和Func的内容不可使用此应用程序进行编辑。
应用程序中的管理员可以在 ihm 中创建角色。角色保存在角色表中。管理员可以通过从App表加载的列表中进行选择,将一个或多个应用程序与创建的角色相关联。保存时,角色和所选应用程序之间的关系将插入到表RoleApp中。
对于每个选定的应用程序,管理员可以使用AppFunc上的连接选择从Func表加载的一个或多个函数。保存时,角色、所选应用程序和归属于应用程序的功能之间的关系将插入到表RoleFuncApp中。
最后,管理员可以为每个功能创建一个或多个权限。保存时,权限将插入到Perm表中,角色、应用程序、函数和创建的权限之间的关系将插入到表RoleAppFuncPerm中。
注意:角色与用户是一对一的关系。应用程序中的每个用户都有一个由管理员赋予的角色。
生成的实体将在两种情况下使用。第一种情况是管理员创建或管理如上所述的角色。在这种情况下,通过保存角色,下表将更新Role、RoleApp、RoleAppFunc、RoleAppFuncPerm和Perm。
第二种情况是用户登录应用程序时。根据其角色,用户只能访问附加到其角色的选定应用程序。在每个应用程序中,他只能访问选定的功能,并且对于每个功能,他只能访问该功能的权限。
对于第二种情况,如果我可以在Role.java实体中有一个List apps,其中只包含与RoleApp中的用户角色相关的应用程序,我会很高兴。并且App.java具有List 函数,其中仅包含与RoleAppFunc中的角色和应用程序相关的函数。最后,具有List 权限的Func.java仅包含与RoleAppFunPerm中的角色、应用程序和函数相关的权限。目标是仅将这些列表用作只读来管理应用程序中角色的访问、功能和权限。
对于第一种情况,我需要一种在Role.java中与表Role、RoleApp、RoleAppFunc、RoleAppFuncPerm和Perm建立关系的方法。这将允许我级联插入/更新/删除角色和(应用程序、功能和权限)之间的关系。
当我做entityManager.persist(role)第一种情况时,有没有人知道在每个 java 实体中创建的关系以进行良好的插入/更新?
对于第二种情况,最好的 JPQL 查询是什么(加载一个只包含与之相关的应用程序、功能和权限的角色)?
解决方案
推荐阅读
- c - 如何在C中打印所有十进制数字,直到所需的最后一位?
- c++ - 警告 #2901:[omp] OpenMP 未激活;所有 OpenMP 指令都将被忽略
- android - 将现有 JAR 或 AAR 作为新项目模块导入
- security - 使用数学解释器会有潜在危险吗?
- here-api - 如何为路线指定车辆类型
- google-chrome - 浏览器缓存的最大文件大小
- php - NSE API 为每个 API 返回 NULL 值
- flutter - 使用brave浏览器调试flutter web app
- excel - 完成刷新后关闭 Excel - ms Access 中的 VBA
- flutter - Flutter 中来自多个 FutureBuilder 的数据