[RESOLVIDO] JPA NamedQuery

4 respostas
W

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:

TypedQuery<Cliente> 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;

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

4 Respostas

J

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

W

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.

W

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

W

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.

Criado 16 de março de 2012
Ultima resposta 20 de mar. de 2012
Respostas 4
Participantes 2