@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);
。。。。
........
------解决方案--------------------
------解决方案--------------------
忘记贴递归了:
/**
* @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参数为判断是否还有下一级。。。
没有的话 单层就不再递归。。知道所有的都没有下一级,,,就是最终的数据。。。。