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.
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]
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.
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.
Sobre estar começando, é normal. Entendemos que você terá várias dúvidas. O único problema é PEDIRPELAMORDEDEUSPAIETODOPODEROSO para a resolução.
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:
Leia a mensagem de erro com atenção;
Leia a documentação, com atenção.
Tente usar o depurador.
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.
Normalmente, você resolve o problema rapidamente, muito antes de chegar no passo 5.