一对多自身关联 ,递归查找主类下面的子类
来源:百度知道 编辑:UC知道 时间:2024/06/19 00:06:41
public StringBuffer getChildId(Catalog catalog, StringBuffer addHql) {
// 关联的子集
if (catalog.getChildCatalogs() != null) {
Set chids = catalog.getChildCatalogs();
Iterator j = chids.iterator();
while (j.hasNext()) {
addHql.append(" or ");
Catalog ca = (Catalog) j.next();
CatalogService cs = new CatalogService();
ca = cs.getCatalog(ca.getId());
addHql.append("a.catalog=" + ca.getId());
if (ca.getChildCatalogs() != null) {
//到这部就开始报错,死循环了,一直再取同一个值,但问题我不知道怎么解决哈
return this.getChildId(catalog, addHql);
}
}
}
return addHql;
}
请大家帮忙看看,谢谢!
这是典型的先序遍历图,看你的意图是要把每个ID用or连接打印出来吧。个人认为,楼上是错的!你打印一下效果,估计不是你所要的!
其实这个方法可以不用返回类型(StringBuffer )
可以弄成void,它的结果都已经存到addHql中。
所以要把
return this.getChildId(catalog, addHql);
改成:
getChildId(ca, addHql);
完整如下试一试!
public StringBuffer getChildId(Catalog catalog, StringBuffer addHql) {
// 关联的子集
if (catalog.getChildCatalogs() != null) {
Set chids = catalog.getChildCatalogs();
Iterator j = chids.iterator();
while (j.hasNext()) {
addHql.append(" or ");
Catalog ca = (Catalog) j.next();
CatalogService cs = new CatalogService();
ca = cs.getCatalog(ca.getId());
addHql.append("a.catalog=" + ca.getId());
if (ca.getChildCatalogs() != null) {
// 到这部就开始报错,死循环了,一直再取同一个值,但问题我不知道怎么解决哈
getChildId(ca, addHql);
}
}
}
return addHql;
}