Recursividade

Tenho a seguinte classe (a persistência está ok e tudo mais):

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    @Column(name = "id_area", nullable = false)
    private Integer idArea;
    
    @Column(name = "DS_SIGLA", nullable = false)
    private String sigla;

    @Column(name = "DS_NOME", nullable = false)
    private String descricao;
    
    @JoinColumn(name = "id_responsavel", referencedColumnName = "id_usuario")
    @ManyToOne(fetch= FetchType.EAGER)
    private Usuario responsavel;  
    
    @Column(name = "FL_ATIVO", nullable = false)
    private Integer status;

    @Column(name = "DT_INCLUSAO", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date dtInclusao;
    
    @ManyToMany(fetch = FetchType.EAGER, cascade= { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "areaList", targetEntity=Usuario.class)
    @JoinTable(name = "AREA_USUARIO",
                joinColumns = {@JoinColumn(name="id_area")},
                inverseJoinColumns = {@JoinColumn(name="id_usuario")}
                )
    private List<Usuario> usuarioList;
    
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id_area_pai", referencedColumnName = "id_area") 
    private Area areaPai;

Tenho que fazer uma função recursiva que me traga os filhos, netos, bisnetos e tataranetos… da área informada. Fiz uma função, entretanto, está trazendo somente os filhos (não está ok):

   public AreaEstruturaTO recursao(Area a, AreaEstruturaTO to) {
	   int count = -1;
	   for (Area area : listAreasFilhas(a.getIdArea())) {
		   if (area.getAreaPai() != null && area.getAreaPai().getIdArea().equals(a.getIdArea())) {
			   if (to.getAreasFilhas() == null) {
				   to.setAreasFilhas(listAreaToEstruturaTO(listAreasFilhas(area.getIdArea())));
			   }
			   areaToAreaEstruturaTO(to, a);
			   to.getAreasFilhas().add(areaToAreaEstruturaTO(area));
		   }
		   count++;
		   recursao(area, to.getAreasFilhas().get(count));
	   }
	   
	   return to;
   }

Alguém pode me ajudar?