日期:2014-05-18  浏览次数:20970 次

高手来领分,hibernate递归遍历树及读取到list中的数据交互
谢谢各位高人,我已经弄了接近20小时,接近崩溃边缘,恳请您指教!


1.   思路和数据结构

目标:   在从hibernate取出数据时应用一个递归算法进行排序,按照节点的父子层次排序得到一个能很好操作的list。总之就是得到一个良好树状顺序的list。并和hibernate进行数据交互。

已经在hbm.xml中进行了双向映射,映射中已经得到了Subject   getSuperSubect(),Set   getSubSubject;
主要数据结构:
class   Subject;{   //就这样表示了
        private   Integer   id;     //本科目节点
        private   String   subjectCode;
        private   String   subjectName;
        private   Integer   level;//在树中的层次
        private   Integer   super_parent_id;   //父节点
  }


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


2.   对hibernate数据库操作类:   DbOperate

package   atis.db;
/**
  *     20070105
  */
import   atis.util.DBUtil;   //导入数据访问工具类
import   atis.db.Subject;

public   class   DbOperate   {

/**
  *   返回所有的科目记录
  */
public   List   getAllSubjects()   throws   HibernateException{

Session   session   =   DBUtil.CurrentSession();
Transaction     tx   =   session.beginTransaction();  
String   sql   =   "   select   s   from   Subject   as   s ";       //查询对象属性语句
Query   query   =   session.createQuery(sql);          
List   list   =   query.list();                                              
tx.commit();      
DBUtil.closeSession();                
return   list;      
}


//得到根节点
public   Subject   getRootSubject()   throws   HibernateException{
Subject   subject   =   null;
Session   session   =   DBUtil.CurrentSession();
Transaction     tx   =   session.beginTransaction();

//Subject   subject   =   new   Subject();
String   sql   =   "   select   s   from   Subject   as   s   where     s.level   =   :id "   ;   //查询对象属性语句

Query   query   =   session.createQuery(sql);  
query.setInteger( "id ",   0);
List   list   =   query.list();  
if   (!list.isEmpty())
subject   =   (Subject)list.get(0);
else   {
Console.print( "没有取到东西_ ");
}

Console.print( "____________ "   +   subject.getId());
tx.commit();      
DBUtil.closeSession();             //关闭
return   subject;        
}
}


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


3.   递归获得list,但是这样写肯定是错误的。。应该怎样操作?怎样传值或者对象?

package   atis