我有两个表 一个表是 dept  一个表式user 
dept表包含字段 id deptname superiorid(上级部门id) user表包含字段 id username deptid 如果我想查询一个部门的所有人员 该怎么写这条hql语句呢?? 注:例如一个部门 id为3,它的下面还有两个子部门,如果我想查询3的所有人员包含下属子部门的人员,怎么写这条语句呢?

解决方案 »

  1.   

    from user as u where u.deptid in (select d.id from dept as d where d.id=3 or d.superiorid=3)
      

  2.   

    员工对部门,一对多的关系!在dept部门表中全有一个字段是set集合类型的,代表User。在部门表的配置文件中设置lazy=false; 然后直接查询dept表中superiorid=3的即可全部级联查询出所有的该部门下的所有员工信息。String hql = "from Dept where superiorid=3";
      

  3.   

    很明显这是一个递归查询,jdbc支持递归,hibernate不支持,所以一条语句解决不了,只能用java按逻辑实现自己的递归。
      

  4.   

    哎 是递归,如果用java逻辑的话的 查询效率好慢啊~~~
    无数的for循环~~~不过还是谢谢各位回答了~~
      

  5.   

    你是不是用oracle数据库 如果是的话 可以用
    select username from user where deptid in 
    (SELECT id FROM dept START WITH id = '3' CONNECT BY PRIOR 
    id = superiorid)
      

  6.   

    关键是 我的数据库中的 superiorid 没有和 部门的 id值建立依赖关系 
    我用的是sql sever2005而且人家设计的数据库 我也不能乱修改的~