多表关联查询的一个HQL例子

本人是新手,刚刚接触hibernate不到2个星期,可能在很多人眼里这是一个非常简单的语句,可是他浪费了我1天的时间,希望对新手有所帮助。
这是一个根据登录人员ID取相应菜单的语句,权限取人员和角色权限的合集。

人员表:SysUser
字段:UserCode,UserName
机构表:SysOrganization
字段:OrgCode,OrgName
菜单表:SysMenu
字段:MenuID,MenuName,FuncID
角色表:SysRole
字段:RoleCode,RoleName
功能表:SysFunction
字段:FuncID,FuncName
人员角色关联表:O_Role_User
字段:oid,RoleCode,UserCode
人员功能关联表:O_Func_User
字段:oid,FuncID,UserID
角色功能关联表:O_Func_Role
字段:oid,FuncID,RoleID

人员和角色跟功能关联,功能跟菜单关联
对应的SQL语句应该是:
[code]
select * from Sys_Menu a
where func_id in
(select func_id from o_func_user where user_code=2000000000)
or func_id in(
select func_id from o_func_role a
left join o_role_user b on a.role_code = b.role_code
where b.user_code=2000000000
)
[/code]
对应的字段不太一样,但是可以看明白。

对应的HQL是:


[code]
String queryString = "select sysmenu from SysMenu sysmenu "
+ "inner join sysmenu.sysFunction func where func.funcId in "
+ "(select func.funcId from OFuncUser fu "
+ "left join fu.sysFunction func "
+ "left join fu.sysUser su where su.userCode=2000000000) "
+ "or func.funcId in "
+ "(select func.funcId from OFuncRole fr "
+ "left join fr.sysFunction func "
+ "left join fr.sysRole sr "
+ "left join sr.ORoleUsers ru "
+ "left join ru.sysUser su "
+ "where su.userCode=2000000000)";
[/code]

相信有更简单方便的方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值