高手来领分,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