【发布时间】:2012-01-23 13:29:56
【问题描述】:
我有一个菜单系统,其中 MenuTabs - 顶级,它们包含 Menu 并且 Menu 包含 MenuItem s。
每个级别项目都有一个用户角色列表,应该对其可见。
我需要创建一个数据库查询来选择 MenuTabs,它只包含当前用户的可见 Menus 和可见 MenuItems。有什么办法可以用 SQL 查询来做到这一点?
我使用 JPA 和 MySql,但任何 SQL 查询都会有所帮助。
作为输入数据,我有一个当前用户的角色列表,我需要为他/她构建正确的菜单系统。所以用户只会看到允许的 MenuTabs / Menus / MenuItems
类:
class MenuTab {
List<Menu> menu;
List<Role> userRoles;
}
class Menu {
List<MenuItem> menuItems;
List<Role> userRoles;
}
class MenuItem {
List<Role> userRoles;
}
class User {
List<Role> userRoles;
}
表格:
menutab menutab_menu menutab_role
id menutabId menutabId
menuId roleId
menu menu_menuitem menu_role
id menuId menuId
menuitemId roleId
menuitem menuitem_role
id menuitemId
roleId
role
id
user user_role
id userId
roleId
【问题讨论】:
-
如果您想要 SQL 答案,表结构会比类结构更有帮助(尽管我认为它们会相似)。
-
表结构是相同的,我们使用 JPA (Hibernate),它从 Java 代码创建表。如果需要,我可以提供结构。谢谢你的评论
-
我认为他们是必要的。
-
很高兴看到您到目前为止所做的尝试。您可能只需要一些正确方向的指针。 (此外,认为您只是在帮助某人而不是为他们做他们的工作总是更好。)还有一个不同点的问题。 MenuTabs、Menus 和 MenuItems 是否应该匹配所有输入列表中提供的角色,还是至少匹配一个就足够了?
-
我不确定是否可以使用查询。我试图做这样的事情:SELECT tab FROM MenuTab tab WHERE EXISTS (SELECT 1 FROM tab.userRoles role WHERE role MEMBER OF :rolesList) 这是 JPA 查询,我没有尝试编写 SQL 查询
标签: mysql sql jpa filter sublist