日期:2014-05-20  浏览次数:20647 次

递归里面不会写...求高手!
@Entity
public class product implements Serializable{
private int pro_id; // 产品ID

private String pro_name; // 产品描述
 
private product pro_parent;

private Set<product> pro_child;  
   
@ManyToOne  
@JoinColumn(name="parent_id")  
public product getPro_parent() {  
return pro_parent;
  }  

@OneToMany(fetch=FetchType.EAGER)  
@JoinColumn(name="parent_id")  
public Set<product> getPro_child() {
return pro_child; 
}
}

@Test
public void recursion()
{
//此list已查处所有数据
List<product> list = pd.GetProductDao();
product pro = null;
for(int i = 0;i < list.size();i++)
{
pro = list.get(i);
ChildString(pro.getPro_child());
}
 


public static String ChildString(Set<product> pSet)
{  
  product pro = null;  
  Iterator<product> iterator = null;  
  iterator = pSet.iterator();  
  while(iterator.hasNext())  
  {  
  pro=iterator.next();  
  if(pro.getPro_child() != null)  
  {  
  ChildString(pro.getPro_child());
  }
  }
  return "";  
}  
假设要形成下图那样式, 那么产品的名称怎么拿出来?在ChildString 方法里面还应该加些什么判断?求教高手! 在线等待...谢谢~ 这样层层下去....
 
  一层:军事类、科学类
  二层:军事1、军事2, 科学1、科学2
  三成:军事1-1、军事1-2,军事2-1、军事2-2,科学1-1,科学1-2、科学2-1、科学2-2.
  四层:军事1-1-1,军事1-2-1,科学1-1-1,科学1-1-2; 。。。。


insert into product values(9990008,'军事类',null);
insert into product values(9990009,'军事1',9990008);
insert into product values( 9990009 ,'军事2',9990008);
insert into product values(9990010,'军事1-1-1',9990009);
。。。。
........

------解决方案--------------------
探讨
我觉得要递归遍历,多次查询数据库,每次的id后变成parentid再查询

------解决方案--------------------
忘记贴递归了:
/**
* @param PostCode
* 根据父节点获取所有子节点岗位编号
* @return 树的子结点集合
*/
@SuppressWarnings("unchecked")
public List<JobType> getPostCodeChilds(String postCode) {
List<JobType> ret = new ArrayList<JobType>();
List<JobType> retRecursive = null;
List<JobType> children = getChildrenNodes(postCode);

for(JobType job0 : children){
String displayOrder = job0.getDisplyOrder();
if(!CommUtil.isNull(displayOrder) && displayOrder.equals("po")){
ret.add(job0);
}else{
retRecursive = getPostCodeChilds(job0.getJobTypeCode());
if(ret.size() == 0){
ret = retRecursive;
}else{
ret.addAll(retRecursive);
}
}
}
return ret;
}

红色部分为传递上层节点 查询数据库,得出下层节点。。
蓝色部分为递归调用,,反复查询下面所有的节点。。
根据displayOrder参数为判断是否还有下一级。。。
没有的话 单层就不再递归。。知道所有的都没有下一级,,,就是最终的数据。。。。