HQL para select por data[Resolvido]

3 respostas
A

Opa… to com um probleminha aqui numa HQL… a situação é a seguinte… tenho no banco alguns dados, e um dos campos inclui uma data preselcionada e setada pelo usuario. No sistema tenho tambem um spinner(pois estou usando Java Swing), com DateModel, e um botao para pesquisar… ao clicar nesse botao eh para rodar uma HQL e buscar no banco os resultados que contem a data que consta no spinner, mas aparentemente o spinner nao esta influenciando em nada na HQL, como estou começando agora com Hibernate provavelmente eu fiz errado, aqui consta o codigo que estou usando.

public void actionPerformed(ActionEvent e) {

Query hql = em.createQuery(FROM CadGastoEntity as cge order by cge.cod_gasto);

List lista = (List)hql.getResultList();

for(CadGastoEntity c : lista)

addLinha(c, table);

}

esse é o codigo do evento do botao

e aqui esta o codigo do metodo addLinha();

public void addLinha(CadGastoEntity c, JTable table){

DefaultTableModel modelo = new DefaultTableModel(new Object[][] {},

new String[] {

Codigo, Valor, Tipo, Data, Descri\u00E7\u00E3o

});
modelo.addRow(new String[]{c.getCod_gasto().toString(),c.getVlr_gasto().toString(),c.getTip_gasto().toString(),c.getDat_gasto().toString(),c.getDesc_gasto().toString()});
	table.setModel(modelo);
}

como eu havia dito a data do spinner nao influencia na HQL,
e clicando no botao so esta me trazendo o ultimo dado gravado no banco, independente do que haja no spinner…
se alguem souber de alguma coisa que possa me ajudar, eu agradeço.

3 Respostas

fbl.lucas
Este é o seu código:
Query hql = em.createQuery("FROM CadGastoEntity as cge order by cge.cod_gasto"); 
List<CadGastoEntity> lista = (List<CadGastoEntity>hql.getResultList(); 
for(CadGastoEntity c : lista) 
	addLinha(c, table); 
} 
//esse é o codigo do evento do botao 
//e aqui esta o codigo do metodo addLinha(); 
public void addLinha(CadGastoEntity c, JTable table){ 
	DefaultTableModel modelo = new DefaultTableModel(new Object[][] {}, 
		new String[] { 
				"Codigo", "Valor", "Tipo", "Data", "Descri\u00E7\u00E3o" 
		}); 

	modelo.addRow(new String[]{c.getCod_gasto().toString(), c.getVlr_gasto().toString(), c.getTip_gasto().toString(), c.getDat_gasto().toString(),     
                                 c.getDesc_gasto().toString()}); 
	table.setModel(modelo); 
}
Primeiramente você não está adicionando a restrição de data ao HQL:
em.createQuery("FROM CadGastoEntity as cge order by cge.cod_gasto");
Deveria ser mais ou menos como abaixo, lembrando que caso a data do spinner seja nula, você não deve adicionar a condição ao hql:
Query hql = em.createQuery("FROM CadGastoEntity as cge where cge.DATA = :DATA_SPINNER order by cge.cod_gasto"); 
hql.setParameter("DATA_SPINNER", spinner.data);
O código acima resolve o problema da restrição de data. Agora vamos entender porque só exibe um item na tabela. Para cada item resultante da consulta você chama o addLinha(...) e dentro dele você cria um novo DefaultTableModel e o adiciona a tabela. Desta forma a cada chama ao método addLinha(...) você perde os dados adicionados na linha anterior. O DefaultTableModel deveria ser instanciado fora do método addLinha(...) .
List<CadGastoEntity> lista = (List<CadGastoEntity>hql.getResultList(); 
DefaultTableModel modelo = new DefaultTableModel(new Object[][] {}, 
		new String[] { 
				"Codigo", "Valor", "Tipo", "Data", "Descri\u00E7\u00E3o" 
		}); 
table.setModel(modelo); 
for(CadGastoEntity c : lista) 
	addLinha(c, modelo); 
} 
public void addLinha(CadGastoEntity c, DefaultTableModel modelo){ 
	modelo.addRow(new String[]{c.getCod_gasto().toString(), c.getVlr_gasto().toString(), c.getTip_gasto().toString(), c.getDat_gasto().toString(),     
                                 c.getDesc_gasto().toString()}); 
	
}
A

fbl.lucas, vlw mesmo cara, era exatamente isso que eu tava procurando, deu certinho o codigo, ta funcionando que é uma beleza!!

fbl.lucas

Que bom que resolveu seu problema, adiciona ao titulo do tópico: “[Resolvido]”

Criado 17 de dezembro de 2011
Ultima resposta 25 de dez. de 2011
Respostas 3
Participantes 2