Retorno de List de Objetos para Laço FOR

6 respostas
E

Ola Pessoal

Estou com problemas para retornar um List de objetos que vem de com query para um laço de repetição FOR.
Criei um método para pegar a consulta e estou usando este metodo na minha calsse, porem apresenta o erro “e cannot be resolved to a variable”
segue abaixo meu método e a classe principal que utiliza o método.
Se alguem puder me ajudar agradeço. Abraços a todos
identar texto pré-formatado por 4 espaços

import entidades.Clientes;

public class ClienteServico {

private EntityManagerFactory emf = Persistence.createEntityManagerFactory("ERSCheff");
private EntityManager em;

public void createEntityManager() {
	em = emf.createEntityManager();
}

public void salvar(Clientes cliente) {
	em.getTransaction().begin();
	em.persist(cliente);
	em.getTransaction().commit();
}

public Clientes atualizar(Clientes cliente) {
	em.getTransaction().begin();
	cliente = em.merge(cliente);
	em.getTransaction().commit();

	return cliente;
}

public List<Clientes> getAllClientes() {

	List<Clientes> listaCli;

	listaCli = em.createNativeQuery("Select e.A1_COD, e.A1_NOME From SA1 e").getResultList();
	return (listaCli);
}

public Clientes getClienteById(int id) {
	return em.find(Clientes.class, id);
}

public void remover(Clientes cliente) {
	em.getTransaction().begin();
	cliente = em.merge(cliente);
	em.remove(cliente);
	em.getTransaction().commit();
}

public void closeEntityManager() {
	em.close();
}

}

O erro é apresentado quando eu executo o trecho abaixo no momento de fazer o FOR

ClienteServico servico = new ClienteServico();
		servico.createEntityManager();

		servico.getAllClientes();
		List<Clientes> customer = servico.getAllClientes();

		for (Clientes c : customer) { //O ERRO É APRESENTADO AQUI !!!
			JOptionPane.showMessageDialog(null, "Teste "+c.getA1_COD(), "Mensagem",
					JOptionPane.INFORMATION_MESSAGE);
		}

6 Respostas

I

Tente implementar a lista primeiro: List<Clientes> customer = new ArrayList<>(); já que List<E> é uma interface e portanto deve ser implementada por uma classe.

staroski

Que erro? Tem certeza de que seu método getAllClientes não está retornando null?
E porque você chama esse método duas vezes?

Não faz o menor sentido instanciar uma lista vazia sendo que o método dele já vai retornar a lista de clientes. Estará somente desperdiçando processador e memória.

pmlm

Isto não devolve uma List<Client> mas sim uma List<Object[]>. Ao tentar obter o Client no for vai dar erro.

E

Ola
Mesmo implementando conforme vc passou o erro persiste. Ljava.lang.Object; cannot be cast entidades.clientes.
Quando entra no laço FOR o erro aparece.

E

pmlm . Muito Obrigado

Matou a charada !!! A consulta devolve realmente um list agrora tenho que transformar isso para minha classe Clientes para que eu possa acionar os métodos e pagar os valores.

Valeu pela Ajuda.

I

Como o @staroski disse falei bobagem… naquele caso o List<Clientes> é só o tipo, já que o método retorna uma lista. Tu está usando o Hibernate? Se for esse método retorna uma lista de objetos, como pode ser visto aqui: Native SQL Queries.

De acordo com o link o tipo da lista deveria ser de Object:

List<Object[]> listaCli;

No for:

int i = 0;
for(Object[] c : listaCli) {

	JOptionPane.showMessageDialog(null, "Teste "+c[i++].getA1_COD(), "Mensagem",
					JOptionPane.INFORMATION_MESSAGE);
}

Dá uma espiada no link…

Criado 25 de maio de 2020
Ultima resposta 26 de mai. de 2020
Respostas 6
Participantes 4