Olá pessoal,
Estou fazendo um projeto da faculdade usando JSF 2.2, CDI 1.1 e JPA.
No meu projeto eu quero fazer uma busca em 3 tabelas no banco, por exemplo:
É um site de brinquedo onde tenha a pagina home com todos os produtos cadastrados no banco de dados, tenho a tela com a lista de brinquedos só de menino e só de menina.
O que acontece e quando tento executar a query para trazer apenas esses produtos apresenta esse erro:
javax.servlet.ServletException: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select prod from br.edu.unicid.sistemaweb.model.Produto as prod join Produto_Categoria prodcat on prod.idProduto=prodcat.Produto_idProduto join Categoria as cat on cat.idCategoria = prodcat.categorias_idCategoria where cat.idCategoria like 1]
Essa é a query que criei:
select prod from Produto as prod "
+ " join Produto_Categoria prodcat on prod.idProduto=prodcat.Produto_idProduto "
+ " join Categoria as cat on cat.idCategoria = prodcat.categorias_idCategoria "
+ " where cat.idCategoria like 1";
Se eu executar essa query no banco de dados, funciona perfeitamente, porém no meu projeto nao.
Se alguém puder ajudar, agradeço.
(se precisar de mais alguma informação, só falar)
Obs.: Eu olhei a resposta de outros topicos, mas as respostas não funcionaram.
Vlws
Ola,
Em JPA voce faria assim:
select prod from Produto as prod
inner join prod.prodcat
inner join prod.categoria
Os mapeamentos nas entidades tem que esta corretos, com os Onetomany, Onetoone e manytoone
Olá Campelo,
Alterei para inner join, mas o erro continua…
O meu mapeamento ta @ManyToMany, assim:
@ManyToMany
private List<Categoria> categorias = new ArrayList<>();
Pode ser por isso que ta dando esse erro ?
Como ficou a consulta depois da alteração?
Assim:
String jpql = "select prod from Produto as prod "
+ " inner join Produto_Categoria prodcat on prod.idProduto=prodcat.Produto_idProduto "
+ " inner join Categoria as cat on cat.idCategoria = prodcat.categorias_idCategoria "
+ " where cat.idCategoria like 1";
Voce leu toda essa resposta?
Li e o que entendi foi o que respondi sobre como ficou a consulta
Voce apenas leu sobre os mapeamente,
Eu passei um exemplo de select para que voce alterasse a sua consulta.
Reveja os passos novamente por favor.
Cara,
Eu realmente li tudo o que vc falou, não sei se vc viu na minha resposta mas eu alterei o sql, já tentei de várias formas e mesmo assim continua o erro.
@campelo.m vlw pela ajuda cara, consegui resolver meu problema.
Fiquei pensando no que vc falou, estudei um pouco mais de jpa e minha query ficou assim:
select prod from Produto prod join prod.categorias c where c.idCategoria = 1
Não sei se é a forma mais correta de se fazer, vou continuar estudando, mas por enquanto me ajuda a entregar esse trabalho na faculdade.
Flws
@PRodrigues, sim, essa é a melhor forma de se fazer, a grande sacada é que voce vai parsear em cima das entidades.
Internamente quando se fala isso “join prod.categorias” o hibernate sabe que é “inner join categorias cat on prod.idcategoria = cat.idcategoria”.