Erro JPA: NamedQuery not found

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!!!

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.

Bom dia rafael.araujodf!

Sim, ela esta na classe Cliente.

Obrigado!

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!

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

Já mapeou a classe no persistence.

[code]?

<?xml version="1.0" encoding="UTF-8"?> construsete pkgsistema.Sistema pkgacesso.Acesso pkgloja.Loja pkgusuario.Usuario pkgunidademedida.UnidadeMedida true [/code]

Testa aí!

[quote=leorbarbosa]Já mapeou a classe no persistence.

[code]?

<?xml version="1.0" encoding="UTF-8"?> construsete pkgsistema.Sistema pkgacesso.Acesso pkgloja.Loja pkgusuario.Usuario pkgunidademedida.UnidadeMedida true [/code]

Testa aí![/quote]

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. :smiley: