怎么用hibernate进行多层查询(急)

J2EE 码拜 6年前 (2015-05-10) 152次浏览 0个评论
 

有个树型控件,单击上面任意一点,讲所有子结点及内容都显示出来.一共用到两个表-categorys和books,books和categorys有多对一关系,而且categorys和本身也有一个一对多关系。
现在要求无论树型控件有多少层,单击一点都可以将其下面的所有内容显示出来。
如:from com.fish.itebookhomedemo.model.mapping.Books b  where  b.categorys.id=:id1 这只有一层
from com.fish.itebookhomedemo.model.mapping.Books b  where  b.categorys.categorys.id=:id1这是两层
我要的是不受层数限制。

5分
哦,如果categorys和本身也有对应关系的话,那就好说了啊,可以试着这么写:
…………
select b from Books b,Categorys c1,Categorys c2 where b.categorys_id = b.id and b.parent_id = c.id
………..
当然,里面还应该加其他的一些判断条件,判断Categorys是第一层的还是第二层的
5分
不一定要一句sql取吧?取到一层以后递归去取下一层不就可以了?按深度遍历树节点嘛
是不是写错了。
是categorys 和本身有一个关系.
li_d_s说清楚点好吗?急!
-_-!写错了

select b from Books b,Categorys c1,Categorys c2 where b.categorys_id = c1.id and c1.parent_id = c2.id

这也不能实现动态啊?
你这只有两层,如果是三层甚至更多了呢?
比如从categorys中id为0的节点开始取,
public List buildCategoryTree(rootid){
    List result = new ArrayList();//存放最终结果
    //根据rootid查找其子节点
    List subCategory = findByParentId(rootid);
    //循环子节点信息
    if(subCategory.size() == 0) result.add(rootid);//如果没有子节点,把自己加入
    else{
       for(Iterator subItr = subCategory.iterator(); subItr.hasNext();){
          Category cg = (Category)subCategory.next();
          result.addAll(buildCategoryTree(cb.getId());
       }
    }
    return result;
}
这里只是单纯的建Category树的方法,如果还要加入Book的话要麻烦一些,自己按照这个思路写
我试一下,谢谢你
5分
Java技术交流 QQ群:3701756
5分
关注

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么用hibernate进行多层查询(急)
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!