Recursividade com jpa

Pessoal tenho uma duvida,

Categoria 1 x N Produto

Esboço das tabelas:

Tabela Categoria

id_categoria integer,
id_categoria_superior integer
nome varchar
foreign key (id_categoria_superior) references categoria(id_categoria)

Tabela Produto
id_produto
id_categoria
...
foreign key (id_categoria) references categoria(id_categoria)

Seguinte, na jpa eu tenho esse mapeamento

@Entity
@Table(name = "categoria")
public class Categoria 

    @Column(name = "id_categoria")
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Integer idCategoria;

    @JoinColumn(name = "id_categoria_superior", referencedColumnName = "id_categoria")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Categoria categoriaSuperior;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "categoriaSuperior", fetch = FetchType.EAGER)
    private List<Categoria> categoriasSuperior;
    ...
}

@Entity
@Table(name = "produto")
public class Produto {

    @JoinColumn(name = "id_categoria", referencedColumnName = "id_categoria")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)    
    private Categoria categoria;
 ...
}

Até ai eu tenho os seguintes registros de Categorias, vejam que podem ter n níveis de categorias

id_categoria| id_superior | nome
1 | NULL | Veículos
2 | 1 | Carros
3 | 2 | GOL
4 | 3 | Palio

Registros da tabela de Produtos

id_produto | id_categoria | Nome
1 | 3 | GOL 1.4 2009
1 | 4 | Palio 2.0

Minha pergunta é, como fasso em jpql executar uma busca recursiva. No caso se eu pesquisar por “Veículos” ele me retornar todos os produtos de todas categorias filhas relacionadas com o registro “Veículos” que é a categoria mais superior da hierarquia.

Alguem me ajuda, já estou a 3 dias nisso e não consigo resolver, to pensando em abandonar jpa e partir pra queries nativas mesmo ;(, visto que em postgres tem a query with recursive

http://andrecf.kinghost.net/freebsd/postgresql/queries-recursivas-em-postgresql/

Obrigado, e serei muito grato pela ajuda.

Vejo que isso é um problema recorrente e ninguem soube resolver, estranho…

Bom eu nunca tentei.

Em oracle eu criava recursividade com o comando Conect by prior.

Tente algo do tipo Conect by prior id_categoria = id_categoria_superior
ou Conect by prior id_categoria_superior = id_categoria

A ordem influencia.

É cara acho que vou ter que recorrer a query nativa mesmo, jpa é hiper limitada tem horas que da raiva :@