Dúvida com NamedQuery

4 respostas
J

Pessoal,

abaixo vocês podem observar a minha NamedQuery atual e que funciona perfeitamente:

@NamedQuery(name = "Products.findAll", query = "SELECT p FROM Products p"),

mas eu gostaria que ela realizasse a seguinte instrução:

SELECT pa.group_id, pa.parent, pa.product_id, p.product_number, pa.rank
FROM products p,
(SELECT pg.product_id, group_id, p.product_number Parent, LEVEL as rank
FROM product_groups pg, products p
WHERE p.product_id = pg.group_id
and business = 'KMAP'
CONNECT BY PRIOR pg.product_id = group_id) pa
WHERE p.product_id = pa.product_id

Como eu poderia definir isso na minha NamedQuery?

Valeu!

4 Respostas

ivandasilva

Posso estar falando besteira mas, esse CONNECT BY PRIOR é exclusivo do Oracle, e muito doido por sinal, é ele que usa recursividade, certo ?

Então, eu acho melhor você executar esta Query com o método executeNativeQuery ou algo do tipo. Você pode também refatorar a Query e construi-lá com a API de Critéria que no JPA ainda não está legal, mas é melhor que NamedQuery, com a refatoração a parte da recursão ficaria na aplicação.

Abraços!

J

Ah legal, eu li algo já sobre query nativa, vou ver se consigo aplicar, senão, posto aqui as dúvidas, valeu!

J

Vi alguns exemplos mas não consegui utilizar o createnativequery, deu alguns erros?

Baseado na minha classe conseguiria me dar uma luz?

obrigado.

ivandasilva
Query q = em.createNativeQuery(....);
Criado 2 de março de 2012
Ultima resposta 5 de mar. de 2012
Respostas 4
Participantes 2