一对多自身关联 ,递归查找主类下面的子类

来源:百度知道 编辑:UC知道 时间:2024/06/19 00:06:41
用Hibernate来实现,如下:

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;
}

<