private List<List<AffiliationVO>> getPaths(List<AffiliationVO> currentPath) throws Exception { List<List<AffiliationVO>> result = new ArrayList<List<AffiliationVO>>(); AffiliationVO affiliationVO = currentPath.get(currentPath.size() - 1); if (affiliationVO.getParentAffiliations().isEmpty()) { result.add(currentPath); } else { for (AffiliationRO parent : affiliationVO.getParentAffiliations()) { List<AffiliationVO> list = new ArrayList<AffiliationVO>(); list.addAll(currentPath); AffiliationVO parentVO = getAffiliation(parent); list.add(parentVO); result.addAll(getPaths(list)); } } return result; }