Erro ao realizar consulta utilizando inner join no JPA

Galera, estou começando a progar com Java, preciso criar um filtro em uma tabela que tem um relacionamento ONETOMANY, ao executar a query abaixo :

query = em.createQuery("SELECT L FROM LIVRO L, EDITORA E INNER JOIN E.IDEDITORA = L.IDEDITORA AND" + " E.NMEDITORA LIKE '%"+ txtpesquizado.replaceAll("%","") + "%'" ); query = em.createQuery("SELECT L FROM LIVRO L, EDITORA E INNER JOIN E.IDEDITORA = L.IDEDITORA AND" + " E.NMEDITORA LIKE '%"+ txtpesquizado.replaceAll("%","") + "%'" );

Me apresenta o erro a seguir, alguém pode me dar uma dica do que estou fazendo de errado??

14:38:16 ERROR [PARSER ] line 1:58: unexpected token: = Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: = near line 1, column 58 [SELECT L FROM LIVRO L, EDITORA E INNER JOIN E.IDEDITORA = L.IDEDITORA AND E.NMEDITORA LIKE '%21213%'] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:624) 14:38:16 ERROR [PARSER ] line 1:58: unexpected token: = Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: = near line 1, column 58 [SELECT L FROM LIVRO L, EDITORA E INNER JOIN E.IDEDITORA = L.IDEDITORA AND E.NMEDITORA LIKE '%21213%'] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:624)

Desde já agradeço a todo que interagirem.

Obs. Tentei seguir varis exemplos que encontrei no FORUM mas não conseguir resolver o problema com nehum deles.

Pq o título todo em CAPS ALTO? Isso é feio! =P

troca INNER JOIN E.IDEDITORA para JOIN E.IDEDITORA

Caracas, agora que vi sua query ta muito loca.

Faça isso aqui:
SELECT L FROM LIVRO L, EDITORA E
WHERE E.IDEDITORA = L.IDEDITORA AND …

Boa tarde JakeFrog, cara fiz a alteração que sugeriu e me apresentou a mensagem abaixo:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: LIVRO is not mapped [SELECT L FROM LIVRO L, EDITORA E WHERE E.IDEDITORA = L.IDEDITORA AND E.NMEDITORA LIKE '%21213%'] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:624) at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:96)

Dá uma olhada no relacionamento da minha classe:

[code]@Entity
@Table(name = “livro”)

public class Livro implements Serializable {
@JoinColumn(name = “ideditora”, referencedColumnName = “ideditora”)
@ManyToOne(fetch=FetchType.EAGER)
// @Cascade(org.hibernate.annotations.CascadeType.ALL)
private Editora ideditora;
@JoinColumn(name = “idclassificacao”, referencedColumnName = “idclassificacao”)
@ManyToOne(fetch=FetchType.EAGER)[/code]

get e sets…

Por favor, NÃO USE SÓ LETRAS MAIÚSCULAS NO TÍTULO DE SEUS TÓPICOS.

Desculpem-me pelo titulo do post, é meu primeiro tópico, prometo não aocntecerá novamente, mas se puderem me dar uma força agradeço.

abraço…

Olha oq a mensagem de erro está falando…

Vc tem a classe livro? ela está criada como LIVRO?

Jakefrog a minha classe esta definida com o seguinte nome “Livro”, ou seja na minha query estava defindo com a descrição toda em maiusculo “LIVRO”,

Ao alterar a descrição da minha classe na query:

query = em.createQuery("SELECT L FROM Livro L, Editora E WHERE E.IDEDITORA = L.IDEDITORA AND" + " E.NMEDITORA LIKE '%"+ txtpesquizado.replaceAll("%","") + "%'" );
É apresentado a mensagem de Erro:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: IDEDITORA of: Modelo.Editora [SELECT L FROM Modelo.Livro L, Modelo.Editora E WHERE E.IDEDITORA = L.IDEDITORA AND E.NMEDITORA LIKE '%21213%'] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:624)
Ou seja, continuo não conseguindo executar minha query.

ME AJUDEM POR FAVOR PESSOAL, NÃO CONSIGO resolver esse problema a alguns dias.

Obrigado uma vez mais Jakefrog pelos comentários.

Desculpe ser chato novamente, mas o pessoal já está te ajudando. Tenha calma, e não fique pressionando o fórum.
Dê uma lida nesse texto, sobre as regras de conduta em fóruns em geral:
http://www.istf.com.br/perguntas/

Seria uma boa você ler com atenção as mensagens de erro também. Aí está dizendo que não existe o atributo idEditora na classe Editora. Esse atributo existe? É público? E foi digitado corretamente?

De fato, camarada, o problema agora é referente à atenção nos detalhes.
Perceba que na query você coloca o IDEDITORA em caracteres maiúsculos. Porém, na classe Livro, o atributo é escrito em letras minúsculas.

Sem calma e paciência, não adianta nada tentar programar. Se ainda não te disseram, é um exercício mental, exige concentração, tranquilidade e dedicação.

Quando você vai fazer consultas utilizando SQL, não há problemas, afinal, SQL é case insensitive.

Agora, HQL ou JPAQL são case sensitives, como o java. assim sendo Java é diferente de JAVA que é diferente de java.

Boa tarde ViniGodoy, uma vez mais desculpe-me se não me prontifiquei de acordo com as regras do forum como disse inicialmente, estou começando com o JAVA, por isso ainda tenho algumas dúvidas básicas, e com certeza estarei quebrando a cabeça com varias situações que por vcs serão mais do que obvias enfim, desde já agradeço a todos pela ajuda, consegui resolver o problema com com a ajuda de vcs. Segue solução:

Após corrigir a descrição da classe na query, foi necessario infromar os campo E.EDITORA = L.EDITORA EXATAMENTE IGUAL AO DELCARADO NA MINHA CLASSE, ou sEJA O CAMPO ESTAVA DEFINIDO ASSIM: “ideditora”, sendo assim a solução ficou dessa forma:

query = em.createQuery("SELECT L FROM Livro L, Editora E WHERE E.ideditora = L.ideditora AND" + " E.nmeditora LIKE '%"+ txtpesquizado.replaceAll("%","") + "%'" );

O problema esta na descrição MAIUSCULA do campo IDEDITORA.

Obrigado a todos…

Sobre estar começando, é normal. Entendemos que você terá várias dúvidas. O único problema é PEDIRPELAMORDEDEUSPAIETODOPODEROSO para a resolução. :slight_smile:

Não quis menosprezar de forma alguma sua capacidade, ou o fato de você ser iniciante. Eu praticamente só atendo ao fórum de Java Básico, onde as perguntas são muito mais primárias que a sua.

Só estou pedindo o que peço para todos os meus alunos.
Antes de perguntar ao professor:

  1. Leia a mensagem de erro com atenção;
  2. Leia a documentação, com atenção.
  3. Tente usar o depurador.
  4. Veja no google se encontra alguém com o mesmo erro que você (talvez a solução já esteja lá).

Se nada disso funcionar: 5. Pergunte. :slight_smile:

Normalmente, você resolve o problema rapidamente, muito antes de chegar no passo 5. :wink: