我有5个表,一个是t_user(用户表),一个是t_role(角色表),一个是t_user_role(用户角色 中间表),一个是t_menu(菜单表),一个是t_role_menu(角色菜单表 中间表)
我现在只有一个用户id,我想查看用户下的所有菜单的hql语句怎么写,具体代码

解决方案 »

  1.   

    from t_menu where t_menu_id = (select t_menu_id from t_role_menu where t_role_id = (select t_role_id from t_role where t_user_id = userId)))
      

  2.   

    (select t_role_id from t_role where t_user_id = userId)))(select t_menu_id from t_role_menu where t_role_id = from t_menu where t_menu_id = 
    共3个查询,你也可以整合成2个
    一个接一个这样查出来来解决
      

  3.   


    我想用一个HQL语句查出来
      

  4.   

    select u from User u where u.id = user_id and  exists (select 1 from UserRole r where r.userId = u.id and exists (select 1 from RoleMenu m where m.roleId = r.roleId))
      

  5.   


    这句话的侧重点不同,我要的结果是出来Menu里面的信息,还有就是我说的是用HQL语句,sql语句我已查出来了
      

  6.   

    只要你配置了也能查出来的,你既然不想这样,那这样
    select m from RoleMenu m where m.roleId = r.roleId and exists (select 1 from UserRole r where m.roleId = r.roleId and exists (select 1 from User u where u.id = user_id and r.userId = u.id))
    这样OK了吗???
      

  7.   

    另外我写的就是HQL,你改相应的地方就可以了
    这样写是没有配置级联的
    如果你配置级联了,直接select  u from User where u.id = id
    就能直接取出你要的数据
      

  8.   


    是这样的,UserRole跟RoleMenu是中间表,hibernate 自动帮我生成的pojo类,里面就只有一个字段,就ID,
    比如:RoleMenu,表里面是引用roleid(role表的主键)跟menuid(menu表的主键),你怎么样用HQL语句得到呢
      

  9.   

    你总有Role,你总有Menu的pojo吧,转一下不就完了。。
    要不你关系里不用ID用<many-to-one>这样不也行吗
      

  10.   

    写原始sql吧,5表关联,嘿嘿。hib嘿嘿