我有一个具有属性"父亲"是他父亲的参考。 (在数据库中像这样) 现在我需要在视图中创建一个树,我必须递归地携带孩子。 我已经制作了下面的方法,但我把孩子加倍了。如果(最佳)正确的方式来完成这个过程并没有进一步。 有人可以帮助我。 谢谢。
@Transactional(readOnly = true)
public Page<CategoriaDTO> findAll(Pageable pageable) {
log.debug("Request to get all Categorias");
Page<Categoria> result = categoriaRepository.findByPadreIsNull(pageable);
List<CategoriaDTO> categoriaDtos = new ArrayList<>();
for (Categoria categoriaAux : result) {
CategoriaDTO categoriaDto = categoriaMapper.categoriaToCategoriaDTO(categoriaAux);
categoriaDto.setHijos(categoriaMapper.categoriasToCategoriaDTOs(categoriaRepository.findByPadre(categoriaAux)));
hijos(categoriaDto.getHijos(),categoriaDto.getId());
categoriaDtos.add(categoriaDto);
}
return new PageImpl<CategoriaDTO>(categoriaDtos);
}
private void hijos(List<CategoriaDTO> hijos,Long padreId){
Categoria categoriaPadre = categoriaRepository.findOne(padreId);
if(! CollectionUtils.isEmpty(hijos)){
for (CategoriaDTO hijo : hijos) {
hijo.setHijos(categoriaMapper.categoriasToCategoriaDTOs(categoriaRepository.findByPadre(categoriaPadre)));
hijos(hijo.getHijos(),hijo.getId());
}
}
}
答案 0 :(得分:0)
据我所知,在您的实体中,您可以引用同一个实体。 所以你可以开始叶子然后上升到树上。以递归方式调用函数,直到Entity具有null parent(表示您已到达根目录)。您还可以将实体添加到列表中。
LinkedList<Category> list = new LinkedList<>();
public void getChildren(Category category) {
list.add(category);
if(category.getParent() == null)
return;
getChildren(category.getParent());
}
这只是一个示例,发布您的实体以获取更多详细信息