MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 高手来领分,hibernate递归遍历树及读取到list中的

高手来领分,hibernate递归遍历树及读取到list中的数据交互,该怎么处理(2)

www.MyException.Cn  网友分享于:2013-01-12  浏览:201次

  */
public   class   SubjectList   {
/**
  *   递归方法返回一个放置对象的list中的一个按级别排序的list
  *   @param   rootSubect:   根节点开始搜索   ,
  *   @return
  */
public   List   findAllChildrenSubjectsList(Subject   rootSubect,   List   list){
if   (rootSubect.getSubSubjects().size()   ==   0)   {   //无子集
Console.print( "__没有取到东西___ ");
return   list;
}   else   {    
    for   (Iterator   it   =   rootSubect.getSubSubjects().iterator();   it.hasNext();   )       {
Subject   theSubject   =   (Subject)   it.next();
                list.add(theSubject);
                findAllChildrenSubjectsList(theSubject,   list);
}
return   list;
}
}


/**调用递归函数得到一个排序完整的list
  *  
  *
  */
public   List   getSubjectList(Subject   root)   {
List   list1   =   new   ArrayList();
//List   list2   =new   ArrayList();
return   findAllChildrenSubjectsList(root,   list1);
}
}


##########################################################################


4.   JSP操作:

<%   DbOperate   db   =   new   DbOperate();  
      List   list   =db.getAllSubjects();//   new   ArrayList();    
      out.println( " <b> 共有   "+   list.size()+ "   条记录 </b> ");
      for   (Iterator   it   =   list.iterator();   it.hasNext();   ){
      Subject   ss   =   (Subject)it.next();      
  %>
 
 
<tr>  
      <td>   <%=ss.getId()%>   </td>
      <td>   <%=ss.getSubjectCode()%>   </td>
      <td>   <%=ss.getSubjectName()%>   </td>
            <td   width= "100 "> 查看详情   </td>
          <td   width= "100 "> 编辑 </td>
      <td   width= "100 "> 删除 </td>
      <td   width= "100 "> 添加子分类 </td>
  </tr>  
     
      <%   }   %>
   

<%
    Subject   rootSubject   =   db.getRootSubject();
   
    %>
      <%=rootSubject.getId()%>  


#########################################################################


5.   JSP中编辑跳转问题

若遍历成功后显示每条记录后都有这条记录对应的“编辑”“删除”按钮,点击后将会跳转到相应的jsp页面,在list中的数据对象如何传递下个页面中去?又如何写入或者读取hibernate?


------解决方案--------------------
看的不是太仔细,你的意思是要求一个多叉树型的数据结构以及对应的hibernate持久层操作是吧?
多叉树型的数据结构必须采用composite模式,其实模式就是个沟通用语,我说composite模式意思就是其数据结构应该是一个节点类、它持有一个子节点集合(里面放的还是节点类)、它还具有至少一个对自己的子节点集合递归的操作方法。
这里面的问题在于你的父节点对应的数据库记录和子节点对应的数据库记录应该全放在一张表里(因为你既然用递归,那么就表示节点数不限),也就是说就一个通用节点类,以一个层数字段标识自己的层深、一个父ID标识自己的父、可能还有一个是否是叶的字段。既然全放在一张表,那些个one-to-many对应也就不需要了,用hibernate保存只要一个通用保存方法即可,就是节点的保存方法。不知道我说的是否对题。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有