[Pseudo-Resolvido] Problema com NamedQuery

Olá a todos,

estou com um probleminha utilizando NamedQueries. O binding da minha query está sendo feito corretamente, pois aparece no log do JBoss, mas quando vou utilizá-la obtenho o erro abaixo:

Tenho uma aplicação JavaServer Faces utilizando JPA, Hibernate e JBoss 6 como servidor de aplicação.

Alguém tem idéia do que se trate?

[]'s

Bom ai está dizendo q a sua chamada “createNamedQuery” está recebendo um nome q não existe. Posta ai o código da entidade e posta tb o trecho q está criando a NamedQuery.

Minha classe:

@Entity @Indexed @Table(name = "redacao") @NamedQueries({ @NamedQuery(name = "redacao.todos", query = "SELECT e FROM Redacao as e") }) public class Redacao extends BaseEntity {
e a mensagem que meu JBoss apresenta no startup:

Cara, vou precisar tb do código q criar a NamedQuery.
Mas ai vai uma dica. Evite o uso de strings para criar as suas NamedQueries. Faça assim:

@Entity  
@Indexed  
@Table(name = "redacao")  
@NamedQueries({  
                @NamedQuery(name = Redacao.TODOS, query = "SELECT e FROM Redacao as e"),  
})  
public class Redacao extends BaseEntity {
    public static final String TODOS = "Redacao.todos";

E ai, quando for criar a query:

entityManager.createNamedQuery(Redacao.TODOS, Redacao.class);

Minha questão é a seguinte:
se o binding está correto, inclusive com o JBoss afirmando isso, porque minha NamedQuery não é encontrada?
Todo o código que mexe com isso já estava pronto; foi preciso uma refatoração e a partir daí minha NamedQuery deixou de ser encontrada.

Provavelmente pq o método “createNamedQuery” está sendo chamado com uma string errada.

@Entity  
@Indexed  
@Table(name = "redacao")  
@NamedQueries({  
                @NamedQuery(name = "redacao.todos", query = "SELECT e FROM Redacao as e")  
})  
public class Redacao extends BaseEntity {

// codigo
entityManager.createNamedQuery("redacao.todo");

Esse código acima iria gerar esse mesma exceção se executado pq não existe NamedQuery “redacao.todo” mas sim “redacao.todos”. Por isso a minha sugestão de q vc use constantes para definir os nomes das suas NamedQueries.

Já verifiquei isto também, estava correto.
Inclusive o erro que o server apresenta tem o nome certo da NamedQuery.

Pergunta, vc está usando JPA ou Hibernate? Se for JPA, como vc está criando o EntityManager?

JPA, e o EntityManager é criado por injeção de EJB.

Kra, manda o q vc puder mais de informação.

Bom, substitui pelo EJB-QL em si pra tentar ganhar tempo.
E o que aconteceu é que agora ele diz que minha entidade não está mapeada, mesmo com o @Entity.
O engraçado é que em outros métodos eu utilizo EJB-QL puro também pra fazer buscas sobre a mesma entidade e elas não geram erro algum.

Como está anotado esse EJB? Existe algum ejb.xml no módulo?

Perdão, é injetado através do @PersistenceContext, e a unidade de persistência está definida no persistence.xml.
Mas se o problema fosse ali, isso não explicaria minha query EJB-QL pura funcionar normalmente e a NamedQuery não, suponho, considerando que ambos usam o mesmo EntityManager.
Encontrei no fórum do JBoss um tópico de outra pessoa com o mesmo problema que o meu, sem solução também.

Não foi bem isso q eu perguntei. Eu gostaria de saber como está configura o EJB em questão. Tipo que anotações estão presentes nele e no método com problema. E se existe algum arquivo chamado ejb.xml presente no diretório META-INF. Tem razão em dizer q isso não faz sentido, mas nada mais faz pois com as informações q vc me passou até agora o código deveria estar funcionando. Então, quanto mais código e configuração vc puder postar melhor.

Não tenho o ejb.xml no diretório META-INF.
Minha classe EJB tem somente a annotation @Stateless.

Problema “solucionado” empacotando toda a aplicação em um .ear.
Mas se alguém souber uma solução melhor…