Erro em HQL: Path expected for join!

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”.