[Resolvido!] Dificuldade com um filtro na List

8 respostas
Kleber-rr

Olá Pessoal do GUJ, boa tarde.

Estou com um probleminha em um simples filtro através de um List. Eu utilizei um "for" junto com um "if" para filtrar uma Lista. Até aqui, tudo bem. O problema é que, quando eu tento realizar uma consulta dentro desta lista, ele me retorna um resultado genérico, como se o for e o if nunca tivesse sido utilizado.

Segue abaixo meu código (trecho):
//...
for (PFOrgaogestor pfog : listpfog){
						if (idog.equals(pfog.getOrgaogestor().getCod_orgaogestor())){
							listpf.add(pfog.getFuncionario());
							System.out.println("listpf:" + listpf);
							
							//O PROBLEMA ESTÁ NESTE MÉTODO ABAIXO
							listpf = funcionarioDao.pesquisaFuncionarios(name,
									this.funcionario.getCpf(), this.funcionario
									.getRg()); // este método deveria fazer uma pesquisa apenas no resultado adicionado à "listpf", entretanto, ele realiza a consulta em toda tabela de funcionário, como se o for/if acima não existisse...
							System.out.println("VALOR DE listpf:" + listpf);
							return listpf;

Se alguém puder contribuir, agradeço.

Vlw.

8 Respostas

nel

Oi!

O que seria retornar algo generico ? Não entendi.
E o seu metodo, poste-o completo. Falta chaves e etc, acabou ficando confuso.

Abraços!

Vini_Fernandes

Bom, para ele entrar na clausula IF devemos ter a seguinte condicao: pfog.getOrgaogestor().getCod_orgaogestor() sempre será igual a variável idog. Isso me faz imaginar que todos os orgaos gestores possuem o mesmo ID, por isso sua condicao sera sempre satisfeita. Sugiro que voce coloque um “break point” nessa comparação e verifique os valores de cada variável.

Ja em relacao ao retorno do metodo do DAO, por favor, envie a implementacao do mesmo para analisarmos.

abrs

Kleber-rr

Amigos, todas as condições de IF estão corretas, ou seja, até a linha: listpf.add(pfog.getFuncionario()); System.out.println("listpf:" + listpf); eu obtenho o filtro desejado. O problema é quando eu executo este método de consulta: listpf = funcionarioDao.pesquisaFuncionarios(name, this.funcionario.getCpf(), this.funcionario.getRg());, que ele me retorna um resultado referente a uma consulta geral, ou seja, sem os filtros feitos pelo for e pelos IF’s.

Meu método pesquisaFuncionarios está assim:

public List<Funcionario> pesquisaFuncionarios(String nome, String cpf, String rg) { Criteria c = session.createCriteria(Funcionario.class); List<Funcionario> results = new ArrayList<Funcionario>(); c.add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE)); c.add(Restrictions.like("cpf", cpf, MatchMode.ANYWHERE)); c.add(Restrictions.like("rg", rg, MatchMode.ANYWHERE)); c.addOrder(Order.asc("nome")); results = (List<Funcionario>) c.list(); System.out.println("nome novo: " + nome); return results; }
Acredito que o problema está na linha onde ele cria uma nova lista com o nome “results”. Esta deve estar sobrescrevendo minha lista filtrada no método bean.

Agradeço a colaboração de todos.

Vini_Fernandes

Cara, vamos mudar a estrategia, em vez de utilizar uma clausual “like” utilize a clausula “eq” (igual) para ver qual sera o retorno. Desse modo voce se certificara se o problema esta na query ou nos dados do banco.

abrs

Kleber-rr

Vini Fernandes:
Cara, vamos mudar a estrategia, em vez de utilizar uma clausual “like” utilize a clausula “eq” (igual) para ver qual sera o retorno. Desse modo voce se certificara se o problema esta na query ou nos dados do banco.

abrs

Olá Vini, td bem?

O problema tb não está na clausula “ilike”. Poderia utilizar também a clausula “eq” + ignoreCase(), mas o problema não vem a ser este…
Realmente, o resultado que me é retornado é em cima de uma nova Lista de Funcionario, e não em cima de uma list.add(funcionario). A questão é em como fazer essa consulta em cima da lista já filtrada.

obrigado por contribuir.

Kleber-rr

Bom, vamos rever a situação:

Eu tenho 3 tabelas relacionadas da seguinte forma:

Funcionario (manyToOne para PFOrgaogestor)
Orgaogestor (manyToOne para PFOrgaogestor)
PFOrgaogestor (OneToMany para Funcionario e Orgaogestor)

através da sessionAtributte, eu consigo saber a qual orgaogestor o usuario logado pertence, e realizar um filtro para os funcionarios que pertencem a este mesmo orgaogestor;
public List<Funcionario> pesquisaFuncionariosComFiltro(String nome, String cpf,
			String rg) {
		Criteria c = session.createCriteria(Funcionario.class);
		Long idog = loginDAO.getIDOG((Long) sessionHttp.getAttribute("idogLogado"));
		Long idpf;
		System.out.println("loginDao idlogado: " + idog);

		List<PFOrgaogestor> oglist = pesquisaFuncionariosByPFOG(idog);
		List <Funcionario> listapf = new ArrayList<Funcionario>();
		for (PFOrgaogestor og : oglist){
			
			if (idog.equals(og.getOrgaogestor().getCod_orgaogestor())){
//				idog = og.getOrgaogestor().getCod_orgaogestor();
				idpf = og.getFuncionario().getCod_funcionario();
				System.out.println("idog é:" + idog);
				PFOGDao ogdao = new PFOGDao(session, PFOrgaogestor.class);
				List <PFOrgaogestor> listpfog = ogdao.getPFbyOG(idog);
				System.out.println("listpfog :" + listpfog);
//... até este ponto, td ok!!!

Preciso agora montar uma lista com os funcionarios da minha lista "listpfog". O problema está aí!!! Como eu posso comparar as duas listas (a de Funcionarios e a listpfog), sendo que as duas são diferentes, e retornar apenas os valores na lista de Funcionarios que se repetem na "listpfog"? sei que isso parece simples, mas aqui travou tudo... quanto mais eu lei mais eu me embolo... estou quase convertendo tudo para string pra ver se fica mais fácil...

Depois que eu montar esta lista, eu preciso realizar esta criteria:
c.add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE));		
						c.add(Restrictions.like("cpf", cpf, MatchMode.ANYWHERE));
						c.add(Restrictions.like("rg", rg, MatchMode.ANYWHERE));
						c.addOrder(Order.asc("nome"));

Alguma dica? Ajuda??

Vlw.

Kleber-rr

Pessoal, consegui chegar a isso:

for (PFOrgaogestor og : oglist){ if (idog.equals(og.getOrgaogestor().getCod_orgaogestor())){ idog = og.getOrgaogestor().getCod_orgaogestor(); idpf = og.getFuncionario().getCod_funcionario(); System.out.println("idog é:" + idog); System.out.println("idpf é:" + idpf); PFOGDao ogdao = new PFOGDao(session, PFOrgaogestor.class); List <PFOrgaogestor> listpfog = ogdao.getPFbyOG(idog); System.out.println("listpfog :" + listpfog); System.out.println("valor do getLista:" + getListadeFuncionarios()); for (Funcionario pf : getListadeFuncionarios()) { if (idpf.equals(pf.getCod_funcionario())){ System.out.println("listpf antes:" + listapf); listapf.add(pf); //aqui deveria me adicionar na lista apenas os itens com id igual ao do for do nivel acima... System.out.println("listpf depois:" + listapf); } else { System.out.println("nao é igual"); } c.add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE)); c.add(Restrictions.like("cpf", cpf, MatchMode.ANYWHERE)); c.add(Restrictions.like("rg", rg, MatchMode.ANYWHERE)); c.addOrder(Order.asc("nome")); } listapf = c.list();

Mas, como se pode ver no resultado do console, ainda não saiu como deveria (neste caso, apenas dois registros com os ids 432 e 586.

//... listpf:[Airlamar Silva de Souza, Aldetania Oliveira Santana, Ana Maria Gomes de Lucas, ANDREIA SOUZA DA SILVA CUNHA, Antonio Osvaldo Oliveira da Silva, Ariana OLiveira da Costa, Celia Regina Faria Martins , ELISABETE DA COSTA GOMES LOPES, Giezi Oliveira dos Santos, Heleomara Ramos de Almeida, ILANY TAVARES DOS REIS, Jhulli Figueiredo Paixão, João da Silva Evangelista Ferreira, Jucilene Lima Santos, Keila Silva Gomes, Kléber Cardoso dos Santos, Larissa lorrani do Carmo Freitas, Lilian Nara Lira Pereira, LIZETH DOS SANTOS RAPOSO, Marcela Pacheco dos Santos, Maria da Conceiçao Araujo da Silva, MARIA DO CARMO PEREIRA DA SILVA, Maria Itelvina Alves Lucena, Maria Regiane do Nascimento de Sousa, MARIA REJANE DE SANTANA SILVA, MARILÚCIA RODRIGUES, RAIMUNDO MARCOS ALMEIDA DE SOUZA, Raissa Lucena peixoto, Sonaira Cristina Mangabeira Vieira, Soraia Rodrigues Pereira, Sueli Terezinha Magalhães, VERANEZ LIMA CARIOCA, Wdson Carlos de Souza] VALOR DE listpffiltrada:[Airlamar Silva de Souza, Aldetania Oliveira Santana, Ana Maria Gomes de Lucas, ANDREIA SOUZA DA SILVA CUNHA, Antonio Osvaldo Oliveira da Silva, Ariana OLiveira da Costa, Celia Regina Faria Martins , ELISABETE DA COSTA GOMES LOPES, Giezi Oliveira dos Santos, Heleomara Ramos de Almeida, ILANY TAVARES DOS REIS, Jhulli Figueiredo Paixão, João da Silva Evangelista Ferreira, Jucilene Lima Santos, Keila Silva Gomes, Kléber Cardoso dos Santos, Larissa lorrani do Carmo Freitas, Lilian Nara Lira Pereira, LIZETH DOS SANTOS RAPOSO, Marcela Pacheco dos Santos, Maria da Conceiçao Araujo da Silva, MARIA DO CARMO PEREIRA DA SILVA, Maria Itelvina Alves Lucena, Maria Regiane do Nascimento de Sousa, MARIA REJANE DE SANTANA SILVA, MARILÚCIA RODRIGUES, RAIMUNDO MARCOS ALMEIDA DE SOUZA, Raissa Lucena peixoto, Sonaira Cristina Mangabeira Vieira, Soraia Rodrigues Pereira, Sueli Terezinha Magalhães, VERANEZ LIMA CARIOCA, Wdson Carlos de Souza] DRIVER CARREGADO VALOR DE pegaOG:Secretaria Municipal de Assistência Social de Alto Alegre VALOR DE idpegaOG:460 loginDao idlogado: 460 Hibernate: select ...//... idog é:460 idpf é:432 Hibernate: select //... listpfog :[br.gov.rr.setrabes.estrutura.PFOrgaogestor@1509f8b, br.gov.rr.setrabes.estrutura.PFOrgaogestor@1a7a05] 12:58:22,467 INFO Dao:37 - Listando todos Hibernate: select //... valor do getLista:[Ariana OLiveira da Costa, ELISABETE DA COSTA GOMES LOPES, LIZETH DOS SANTOS RAPOSO, RAIMUNDO MARCOS ALMEIDA DE SOUZA, Soraia Rodrigues Pereira, MARILÚCIA RODRIGUES, NUBIA COSTA LIMA, ANDREIA SOUZA DA SILVA CUNHA, Heleomara Ramos de Almeida, Airlamar Silva de Souza, VERANEZ LIMA CARIOCA, MARIA RAIMUNDA DA SILVA MOURA, Wdson Carlos de Souza, Larissa lorrani do Carmo Freitas, Maria Regiane do Nascimento de Sousa, ILANY TAVARES DOS REIS, Marcela Pacheco dos Santos, Jucilene Lima Santos, Antonio Osvaldo Oliveira da Silva, Sueli Terezinha Magalhães, MARIA REJANE DE SANTANA SILVA, Aldetania Oliveira Santana, Keila Silva Gomes, MARIA DO CARMO PEREIRA DA SILVA, Maria Itelvina Alves Lucena, Celia Regina Faria Martins , Ana Maria Gomes de Lucas, João da Silva Evangelista Ferreira, Maria da Conceiçao Araujo da Silva, Giezi Oliveira dos Santos, Sonaira Cristina Mangabeira Vieira, Lilian Nara Lira Pereira, Raissa Lucena peixoto, Kléber Cardoso dos Santos, Jhulli Figueiredo Paixão] 12:58:22,472 INFO Dao:37 - Listando todos Hibernate: select //... nao é igual listpf antes:[] listpf depois:[ELISABETE DA COSTA GOMES LOPES] //... listpf:[Airlamar Silva de Souza, Aldetania Oliveira Santana, Ana Maria Gomes de Lucas, ANDREIA SOUZA DA SILVA CUNHA, Antonio Osvaldo Oliveira da Silva, Ariana OLiveira da Costa, Celia Regina Faria Martins , ELISABETE DA COSTA GOMES LOPES, Giezi Oliveira dos Santos, Heleomara Ramos de Almeida, ILANY TAVARES DOS REIS, Jhulli Figueiredo Paixão, João da Silva Evangelista Ferreira, Jucilene Lima Santos, Keila Silva Gomes, Kléber Cardoso dos Santos, Larissa lorrani do Carmo Freitas, Lilian Nara Lira Pereira, LIZETH DOS SANTOS RAPOSO, Marcela Pacheco dos Santos, Maria da Conceiçao Araujo da Silva, MARIA DO CARMO PEREIRA DA SILVA, Maria Itelvina Alves Lucena, Maria Regiane do Nascimento de Sousa, MARIA REJANE DE SANTANA SILVA, MARILÚCIA RODRIGUES, RAIMUNDO MARCOS ALMEIDA DE SOUZA, Raissa Lucena peixoto, Sonaira Cristina Mangabeira Vieira, Soraia Rodrigues Pereira, Sueli Terezinha Magalhães, VERANEZ LIMA CARIOCA, Wdson Carlos de Souza] idog é:460 idpf é:586 Hibernate: //... listpf:[Airlamar Silva de Souza, Aldetania Oliveira Santana, Ana Maria Gomes de Lucas, ANDREIA SOUZA DA SILVA CUNHA, Antonio Osvaldo Oliveira da Silva, Ariana OLiveira da Costa, Celia Regina Faria Martins , ELISABETE DA COSTA GOMES LOPES, Giezi Oliveira dos Santos, Heleomara Ramos de Almeida, ILANY TAVARES DOS REIS, Jhulli Figueiredo Paixão, João da Silva Evangelista Ferreira, Jucilene Lima Santos, Keila Silva Gomes, Kléber Cardoso dos Santos, Larissa lorrani do Carmo Freitas, Lilian Nara Lira Pereira, LIZETH DOS SANTOS RAPOSO, Marcela Pacheco dos Santos, Maria da Conceiçao Araujo da Silva, MARIA DO CARMO PEREIRA DA SILVA, Maria Itelvina Alves Lucena, Maria Regiane do Nascimento de Sousa, MARIA REJANE DE SANTANA SILVA, MARILÚCIA RODRIGUES, RAIMUNDO MARCOS ALMEIDA DE SOUZA, Raissa Lucena peixoto, Sonaira Cristina Mangabeira Vieira, Soraia Rodrigues Pereira, Sueli Terezinha Magalhães, VERANEZ LIMA CARIOCA, Wdson Carlos de Souza] VALOR DE listpffiltrada:[Airlamar Silva de Souza, Aldetania Oliveira Santana, Ana Maria Gomes de Lucas, ANDREIA SOUZA DA SILVA CUNHA, Antonio Osvaldo Oliveira da Silva, Ariana OLiveira da Costa, Celia Regina Faria Martins , ELISABETE DA COSTA GOMES LOPES, Giezi Oliveira dos Santos, Heleomara Ramos de Almeida, ILANY TAVARES DOS REIS, Jhulli Figueiredo Paixão, João da Silva Evangelista Ferreira, Jucilene Lima Santos, Keila Silva Gomes, Kléber Cardoso dos Santos, Larissa lorrani do Carmo Freitas, Lilian Nara Lira Pereira, LIZETH DOS SANTOS RAPOSO, Marcela Pacheco dos Santos, Maria da Conceiçao Araujo da Silva, MARIA DO CARMO PEREIRA DA SILVA, Maria Itelvina Alves Lucena, Maria Regiane do Nascimento de Sousa, MARIA REJANE DE SANTANA SILVA, MARILÚCIA RODRIGUES, RAIMUNDO MARCOS ALMEIDA DE SOUZA, Raissa Lucena peixoto, Sonaira Cristina Mangabeira Vieira, Soraia Rodrigues Pereira, Sueli Terezinha Magalhães, VERANEZ LIMA CARIOCA, Wdson Carlos de Souza]

Alguma ajuda?

Kleber-rr

Resolvido pessoal. Era problema no “for”. Revisei a lógica e resolvi o problema.

Agradeço a colaboração de todos.

Até a próxima!

Criado 22 de agosto de 2011
Ultima resposta 29 de ago. de 2011
Respostas 8
Participantes 3