如果你是oracle数据库,那么可以select id from treeEm start with id='your business id' --在这写入你想要查找的初始节点 connect by prior id = parentid这语句可以返回 你输入的节点下的所有节点,然后把结果些入list即可
写一个public Bean getChild(int parentId);给一个父ID,得到子数据条目的一个JavaBean,如果没有子数据条目则返回null。 List<Bean> list = new ArrayList<Bean>(); int id = ##; Bean b = null; while((b=getChild(id))!=null){ id=b.getId; list.add(b); } return b;
slqserver2005:with showtree(id,parentid) as ( select top 1 id,parentid from form where id=1 union all select t.id,t.parentid from form as t join showtree on t.parentid=showtree.id ) SELECT id,parentid FROM showtree order by parentid
我需要做这件事是再DAO这层 public List findChildId (String parentId) { String queryStr = "select vg.id from treeEm as vg where vg.parent=? = '"+parentId'"; list.add(getHibernateTemplate().find(queryStr)); ..... return list; }我就是想再这里输入一个parentId的字符串,输出一个这个节点以下Id得list总计,老是这段递归写得有问题,有人能指导一下吗 谢谢了
List 获得子id(父id){ ... }void 获得子id(父id,List result){ List temp=获得子id(父id); result.addAll(temp); 遍历temp中的子{ 获得子id(子id,List result){ } } 调到方法: List allChlid=new ArrayList(); 获得子id(父id,List allChlid); allChlid中就是递归得到的所有子id
List 获得子id(父id){ ... }void 获得子id(父id,List result){ List temp=获得子id(父id); result.addAll(temp); 遍历temp中的子{ 获得子id(子id,List result){ } } 调到方法: List allChlid=new ArrayList(); 获得子id(父id,List allChlid); allChlid中就是递归得到的所有子id
我现在还不会Spring.所以,楼主的框架我也不会用,总觉得getHibernateTemplate().find(queryStr) 这个调用返回的应该是List对象.所以,那个list.add(getHibernateTemplate().find(queryStr));是不是应该是list.addAll()方法?下面是一个效率低下的办法,楼主看懂意思,应该就可以出现结果.如果要提高效率,可能要复杂一些了.可以想办法一条SQL搞出结果这样可能要好一些.public List findChildId (String parentId) { List list = new LinkedList(); findChildId0(list,parentId); return list; }private void findChildId0 (List list,String parentId) { String queryStr = "select vg.id from treeEm as vg where vg.parent=? = '"+parentId'"; List result = getHibernateTemplate().find(queryStr); if(result!=null && result.size()>0){ list.addAll(result); for(Iterator itr=result.iterator();itr.hasNext();){ String pId = (String)itr.next(); findChildId0(list,pId); } } }
楼主【andrew_zx】截止到2008-07-08 15:57:12的历史汇总数据(不包括此帖):
发帖的总数量:31 发帖的总分数:690 每贴平均分数:22
回帖的总数量:24 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:18 结贴的总分数:440
无满意结贴数:0 无满意结贴分:0
未结的帖子数:13 未结的总分数:250
结贴的百分比:58.06 % 结分的百分比:63.77 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
如果你是oracle数据库,那么可以select id from treeEm
start with id='your business id' --在这写入你想要查找的初始节点
connect by prior id = parentid这语句可以返回 你输入的节点下的所有节点,然后把结果些入list即可
List<Bean> list = new ArrayList<Bean>();
int id = ##;
Bean b = null;
while((b=getChild(id))!=null){
id=b.getId;
list.add(b);
}
return b;
as
(
select top 1 id,parentid from form where id=1
union all
select t.id,t.parentid from form as t join showtree on t.parentid=showtree.id
)
SELECT id,parentid FROM showtree order by parentid
public List findChildId (String parentId) {
String queryStr = "select vg.id from treeEm as vg where vg.parent=? = '"+parentId'";
list.add(getHibernateTemplate().find(queryStr));
.....
return list;
}我就是想再这里输入一个parentId的字符串,输出一个这个节点以下Id得list总计,老是这段递归写得有问题,有人能指导一下吗 谢谢了
...
}void 获得子id(父id,List result){
List temp=获得子id(父id);
result.addAll(temp);
遍历temp中的子{
获得子id(子id,List result){
}
}
调到方法:
List allChlid=new ArrayList();
获得子id(父id,List allChlid);
allChlid中就是递归得到的所有子id
...
}void 获得子id(父id,List result){
List temp=获得子id(父id);
result.addAll(temp);
遍历temp中的子{
获得子id(子id,List result){
}
}
调到方法:
List allChlid=new ArrayList();
获得子id(父id,List allChlid);
allChlid中就是递归得到的所有子id
List list = new LinkedList();
findChildId0(list,parentId);
return list;
}private void findChildId0 (List list,String parentId) {
String queryStr = "select vg.id from treeEm as vg where vg.parent=? = '"+parentId'";
List result = getHibernateTemplate().find(queryStr);
if(result!=null && result.size()>0){
list.addAll(result);
for(Iterator itr=result.iterator();itr.hasNext();){
String pId = (String)itr.next();
findChildId0(list,pId);
}
}
}