过滤 SQL 查询中的子列表结果
我有一个菜单系统,其中 MenuTabs - 顶层,它们包含 Menu ,并且 Menu 包含 MenuItem 。
每个级别项目都有一个对其可见的用户角色列表。
我需要创建一个数据库查询来选择 MenuTabs,其中仅包含当前用户的可见菜单和可见菜单项。有什么办法可以用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
I have a menu system where MenuTabs - the top level, they contain Menu and Menu contains MenuItem s.
Each level item has a list of user Role s it should be visible for.
I need to create a database query to select MenuTabs which contains only visible Menus with visible MenuItems for the current User. Is any way to do it with SQL query?
I use JPA and MySql, but any SQL query would be helpful.
As input data, I have a list of roles for the current user and I need to build right menu system for him/her. So user will see only allowed MenuTabs / Menus / MenuItems
Classes:
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;
}
Tables:
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您使用 Hibernate,则不必处理 sql
我不熟悉 Hibernate,但在 NHibernate 中你可以像这样使用 HQL:
if you are using Hibernate you dont have to deal with sql
i am not familiar with Hibernate but in NHibernate you could utilize HQL like that :
在 SQL 中,我可能会这样做:
假设
@userId
是当前用户 ID,它作为参数传递给查询。In SQL I might perhaps do something like this:
It is assumed that
@userId
is the current user ID, which is passed to the query as a parameter.