[RESOLVIDO] JPA NamedQuery

Pessoal,

Por favor, vejam se conseguem me ajudar…

tenho uma entity com uma namedquery

@Entity(name="tbl_clientes") @NamedQueries( { @NamedQuery( name = "Cliente.listAll", query = "select c from tbl_clientes c where inativo = 0 order by nome_cliente")})

e tento retornar todos os clientes já com as variaveis mapeadas corretamente do banco pela seguinte pesquisa:

[code]TypedQuery query = Factory.EManager).createNamedQuery(“Cliente.listAll”, Cliente.class);

	List<Cliente> listaClientes = query.getResultList();

	System.out.print(listaClientes);
	
	System.out.print(listaClientes.get(1).getNomeCliente());
	
	return listaClientes;

[/code]

A lista retorna o numero total de resultados corretos, só que os resultados só tem uma variavel preenchida, o restante está NULL, e todos os resultados com o mesmo valor.

exemplo:

ResultList total 200

Valor 1
x = null
y - 70

valor 2
x = null
y - 70

Fala weder.vierra, blz?

Pelo o que parece você misturou sql com JPQL…

Tente fazer assim:

@Entity(name="tbl_clientes")  
@NamedQueries( {   
    @NamedQuery( name = "Cliente.listAll", query = "select c from Cliente c where c.inativo = 0 order by c.nome")})  

Lembrando que o c. deve ser o nome do atributo e não o campo na tabela do banco, ok?

Vlw

Julian

Obrigado pela resposta.
A observação que você fez foi importante.

Porém haviam mais coisas a serem considerados, no final o resultado veio como o esperado e correto.

Porém, ainda tenho uma dúvida, veja se você pode me explicar.

A dúvida:

Tenho mapeado no arquivo persistence.xml, 2 banco de dados no mesmo servidor.
Exemplo:

<persistence-unit name="db1" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>classe1</class>
............

<persistence-unit name="db2" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>Cliente</class>

Veja,
No DB1 é meu novo banco onde as tabelas devem ser criadas a partir das entitys.
No DB2 onde está a tabela cliente, ele já existia e tentei programar para não haver alteração.

O que está ocorrendo é, no DB2 não há alterações e as consultas retornam corretamente (Agora).

E no DB1 está sendo criado a tabela cliente (o que não deveria ocorrer.)

Na entity cliente coloquei está observação:

@PersistenceUnits({@PersistenceUnit(unitName="db2")})
@Entity(name="tbl_clientes")
@NamedQueries( { 
	@NamedQuery( name = "Cliente.listAll", query = "select c from tbl_clientes c where c.inativo = 0 order by c.nomeCliente")})

Tentei indicar o unitName para o DB2, mas mesmo assim ele ainda cria a tabela no DB1

Consegui explicar direito.

Obrigado novamente.

Outra observação:

Em todas as entitys tentei indicar para qual persistente ela pertence utilizando a annotation abaixo

Para DB1

Para DB

Mas ainda assim ele cria a tabela Cliente no DB1

Resolvi esse problema fazendo o seguinte.

Além de mapear cada entity para o seu unitName correto.

Dentro do persistence.xml coloquei um parametro de:

Com isso, só as classes listadas dentro do resource serão mapeadas para o banco configruado no seu properties.