Erro JPA: NamedQuery not found

6 respostas
Marck

Boa noite!

Gostaria de uma ajuda com este código:

public static Cliente consultar(int idCli){
        
        ManagerFactoryOrq mf = new ManagerFactoryOrq();
               
        Query q = mf.getEm().createNamedQuery("Cliente.findByIdCliente").setParameter("idCliente", idCli);
        return ((Cliente)q.getSingleResult());
        
    }

Na linha que faz o createNamedQuery(), gera a seguinte exception:

Exception in thread "main" java.lang.IllegalArgumentException: NamedQuery of name: Cliente.findByIdCliente not found.
        at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.getDatabaseQuery(EJBQueryImpl.java:422)
        at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.setParameterInternal(EJBQueryImpl.java:657)
        at oracle.toplink.essentials.internal.ejb.cmp3.EJBQueryImpl.setParameter(EJBQueryImpl.java:202)

A Query esta assim:

@NamedQueries({@NamedQuery(name = "Cliente.findByIdCliente", 
query = "SELECT c FROM Cliente c WHERE c.idCliente = :idCliente"),

Ja gerei novamente a classe, mas sempre da este mesmo erro…
Por que não encontra esta namedQuery?
Alguém pode me dar alguma dica?

Muito Obrigado!!!

6 Respostas

Rapapel

Não tenho certeza do que vou falar, sempre deixo as named queries na sua classe correspondente, e nunca tive esse problema, Essa named querie esta na classe Cliente?

Espero ter ajudado.

Abraço.

Marck

Bom dia rafael.araujodf!

Sim, ela esta na classe Cliente.

Obrigado!

Marck

rafael.araujodf

Acontece que o meu metodo é static, e esperto que sou, estava chamando sem criar uma nova instancia. Por isso não encontrava a namedQuery (acho).

obrigado cara!

R

Pessoal,

Se alguém puder quebrar um galho aí…

Estou com um erro em uma aplicação que está sendo desenvolvida para a faculdade, com JPA Toplink, mas não consigo resolver este problema:

NamedQuery of name: TcargoFuncEmpr.findAll not found.

A Query que não está sendo localizada está aqui:

@Entity
@Table(name = "tcargo_func_empr")
@NamedQueries({
    @NamedQuery(name = "TcargoFuncEmpr.findByCargoFuncEmpr", 
                query = "SELECT t FROM TcargoFuncEmpr t WHERE t.cargoFuncEmpr = :cargoFuncEmpr"), 
    @NamedQuery(name = "TcargoFuncEmpr.findByDscargoFuncEmpr", 
                query = "SELECT t FROM TcargoFuncEmpr t WHERE t.dscargoFuncEmpr = :dscargoFuncEmpr"), 
    @NamedQuery(name = "TcargoFuncEmpr.findByVlrPisoSlrioCargo", 
                query = "SELECT t FROM TcargoFuncEmpr t WHERE t.vlrPisoSlrioCargo = :vlrPisoSlrioCargo"),
    @NamedQuery(name = "TcargoFuncEmpr.findAll", 
                query = "SELECT t FROM TcargoFuncEmpr t ORDER BY t.cargoFuncEmpr")
})        
public class TcargoFuncEmpr implements Serializable {
    private static final long serialVersionUID = 1L;

O persistence.xml foi gerado automaticamente pelo NetBeans:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="SACPU" transaction-type="RESOURCE_LOCAL">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <class>lib.database.TpssoaRlcndSist</class>
    <class>lib.database.TcargoFuncEmpr</class>
    <properties>
      <property name="toplink.jdbc.user" value="root"/>
      <property name="toplink.jdbc.password" value="xxxxx"/>
      <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/SAC"/>
      <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
    </properties>
  </persistence-unit>
</persistence>

O erro ocorre no getResultList:

TcargoFuncEmpr cargo = new TcargoFuncEmpr();
        
    EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("SACPU");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin(); 
    
    Query query = em.createNamedQuery("TcargoFuncEmpr.findAll"); 
    
    try {
        List resultado = query.getResultList();

O mais estranho é que, debugando o programa, descobri que quando ele cria o EntityManager (na quarta a linha do código acima), a outra classe citada no persistence.xml (TpssoaRlcndSist) é instanciada.

Diferente do cara de cima, o meu método não é estático.

Espero que tenha conseguido me fazer entender…

Valews

leorbarbosa
Já mapeou a classe no persistence.
?
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="LojaWebALPU" transaction-type="JTA">
    <jta-data-source>construsete</jta-data-source>
    <class>pkgsistema.Sistema</class>
    <class>pkgacesso.Acesso</class>
    <class>pkgloja.Loja</class>
    <class>pkgusuario.Usuario</class>
    <class>pkgunidademedida.UnidadeMedida</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties/>
  </persistence-unit>
</persistence>

Testa aí!

R
leorbarbosa:
Já mapeou a classe no persistence.
?
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="LojaWebALPU" transaction-type="JTA">
    <jta-data-source>construsete</jta-data-source>
    <class>pkgsistema.Sistema</class>
    <class>pkgacesso.Acesso</class>
    <class>pkgloja.Loja</class>
    <class>pkgusuario.Usuario</class>
    <class>pkgunidademedida.UnidadeMedida</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties/>
  </persistence-unit>
</persistence>

Testa aí!

Até estranhei quando recebi a notificação de resposta no meu e-mail.

A dúvida era de 2008! =p

Provavelmente, na época, fiquei sem resolver o problema, já que costumava divulgar as soluções encontradas.

De qualquer forma, obrigado pela gentileza de responder.

Fica de referência pra quem estiver googando solução para algum problema parecido. :D

Criado 17 de abril de 2008
Ultima resposta 26 de set. de 2012
Respostas 6
Participantes 4