Problemas com DAO e Bean

6 respostas
J

Pessoal, estou com problemas na hora de receber uma lista com critérios usando hibernate com JPA. Já tentei usar criteria e o JPQL mas não tive muito sucesso.
Alguém que já passou por esse problema sabe me dizer o que fazer?

O método que estou com problemas é o buscarTodos.

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;

public class DAO<T> {
	private final Class<T> classe;

	public DAO(Class<T> classe) {
		this.classe = classe;
	}

	public void adiciona(T t) {
		// consegue a entity manager
		EntityManager em = new JPAUtil().getEntityManager();
		// abre transacao
		em.getTransaction().begin();

		// persiste o objeto
		em.persist(t);

		// commita a transacao
		em.getTransaction().commit();

		// fecha a entity manager
		em.close();
	}

	public void remove(T t) {
		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();

		em.remove(em.merge(t));

		em.getTransaction().commit();
		em.close();
	}

	public void atualiza(T t) {
		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();

		em.merge(t);

		em.getTransaction().commit();
		em.close();
	}

	public List<T> listaTodos() {
		EntityManager em = new JPAUtil().getEntityManager();
		CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
		query.select(query.from(classe));

		List<T> lista = em.createQuery(query).getResultList();

		em.close();
		return lista;
	}

	public int contaTodos() {
		EntityManager em = new JPAUtil().getEntityManager();
		long result = (Long) em.createQuery(
				"select count(n) from " + classe.getName() + " n")
				.getSingleResult();
		em.close();
		return (int) result;
	}


	@SuppressWarnings("unchecked")
	public List<T> BuscarTodos() {
		EntityManager em = new JPAUtil().getEntityManager();
		Query query = em.createNativeQuery("SELECT inauguracao.tipologia, Count(inauguracao.nome) AS qtd FROM inauguracao WHERE "
						+ "inauguracao.tipologia <> ' ' AND inauguracao.dia >= '2011-01-01' AND inauguracao.dia <= now() GROUP BY "
						+ "inauguracao.tipologia ORDER BY qtd DESC");
		List<T> lista = (List<T>)query.getResultList();
		em.close();
		return lista;
	}
}
import java.util.List;

import javax.faces.bean.ManagedBean;

import br.com.bb.canais.dao.DAO;
import br.com.bb.canais.modelo.Inauguracao;


@ManagedBean
public class InauguracaoBean {

	private Inauguracao inauguracao = new Inauguracao();
		
	private List<Inauguracao> inauguracoes;
	private List<Inauguracao> tipologias;

	public Inauguracao getInauguracao() {
		return inauguracao;
	}
	
	public List<Inauguracao> getTipologias() {
		if (tipologias == null) {
			System.out.println("carregando as tipologias...");
			tipologias = new DAO<Inauguracao>(Inauguracao.class).BuscarTodos();
		}
		return tipologias;
	}	

	public List<Inauguracao> getInauguracoes() {
		if (inauguracoes == null) {
			System.out.println("Carregando as inaugurações...");
			inauguracoes = new DAO<Inauguracao>(Inauguracao.class).listaTodos();
		}
		return inauguracoes;
	}

}
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">

<ui:composition template="/_template.xhtml">

	<ui:define name="corpo">
	
		<h:form>
		
		<p:menubar>
			<p:menuitem value="Inaugurações" url="inauguracao.xhtml" icon="ui-icon-search"  />
			<p:menuitem value="Próximas Inaugurações"  url="inaug.xhtml" icon="ui-icon-search"/>
			<p:menuitem value="Resumo" icon="ui-icon-search"/>
		</p:menubar>
						
			<h3 align="center">Pontos Inaugurados</h3>
			<p:dataTable id="basic" var="inauguracao"
				value="#{inauguracaoBean.inauguracoes}" rows="8" paginator="true">

				<p:column headerText="Data">
				<h:outputLabel value="#{inauguracao.dia.time}">
					<f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
				</h:outputLabel>
				
				</p:column>

				<p:column headerText="Prefixo">
							#{inauguracao.prefixo}
						</p:column>

				<p:column headerText="Município">
							#{inauguracao.municipio}
						</p:column>

				<p:column headerText="UF">
							#{inauguracao.uf}
						</p:column>

				<p:column headerText="Tipologia">
							#{inauguracao.tipologia}
						</p:column>

				<p:column headerText="Projeto">
							#{inauguracao.projeto}
						</p:column>

			</p:dataTable>			
					
			<h3 align="center">Placar de Inauguração</h3>			
				
			<p:dataTable id="teste" var="tipologia" rows="9" value="#{inauguracaoBean.tipologias}">
				<p:column headerText="Tipologia">
						#{tipologia.tipologia}
						</p:column>

				<p:column headerText="Total">
						#{tipologia.qtd}
						</p:column>

				
			</p:dataTable>
		</h:form>		
	</ui:define>

</ui:composition>

</html>
Informações: Starting ProtocolHandler ["http-bio-80"]
Mai 21, 2012 12:14:58 PM org.apache.coyote.AbstractProtocol start
Informações: Starting ProtocolHandler ["ajp-bio-8009"]
Mai 21, 2012 12:14:58 PM org.apache.catalina.startup.Catalina start
Informações: Server startup in 7015 ms
Carregando as inaugurações...
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Hibernate: select inauguraca0_.ordem as ordem0_, inauguraca0_.dia as dia0_, inauguraca0_.municipio as municipio0_, inauguraca0_.nome as nome0_, inauguraca0_.prefixo as prefixo0_, inauguraca0_.projeto as projeto0_, inauguraca0_.tipologia as tipologia0_, inauguraca0_.uf as uf0_ from Inauguracao inauguraca0_
carregando as tipologias...
Hibernate: SELECT inauguracao.tipologia, Count(inauguracao.nome) AS qtd FROM inauguracao WHERE inauguracao.tipologia <> ' ' AND inauguracao.dia >= '2011-01-01' AND inauguracao.dia <= now() GROUP BY inauguracao.tipologia ORDER BY qtd DESC
Mai 21, 2012 12:15:31 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
Grave: Error Rendering View[/inauguracao.xhtml]
javax.el.ELException: /inauguracao.xhtml: For input string: "tipologia"
	at com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:90)
	at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
	at com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRegularCell(DataTableRenderer.java:760)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:722)
	at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:626)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:248)
	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:224)
	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:108)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:883)

6 Respostas

drsmachado

Tem certeza que os dados não estão sendo retornados?
Eu sugiro que você efetue um debug e valide se, neste método, não há uma lista de tipologias

public List<Inauguracao> getTipologias() { if (tipologias == null) { System.out.println("carregando as tipologias..."); tipologias = new DAO<Inauguracao>(Inauguracao.class).BuscarTodos(); } //coloque um breakpoint nesta linha return tipologias; //nesta verifique se tipologias está nulo. }

J

tipologias está nulo sim!

J

O problema persiste e já não sei o que fazer. Já debuguei e vi que não estar trazendo os valores. O que acha que pode ser.

drsmachado

Qual a estrutura da tabela inauguracao e o que você pretende trazer dela, na consulta?

J
dia	             prefixo	nome	        municipio	        UF	ordem	    tipologia        projeto
25/02/2011	5799	Moreninhas	Campo Grande	MS	21	    Agência Varejo	Expansão
06/01/2011	4398	Várzea	        Teresópolis	RJ	22	    Agência Varejo	Expansão
17/01/2011	4773	Estilo Joinville	Joinville	        SC	24	    Agência Estilo  	Expansão
25/01/2011	5976	Cidade de Deus	Rio de Janeiro	RJ	26	     Agência Varejo	Posicionamento

A base que estou trazendo é essa.
Agora não sei sei se posso trazer um count, list, e order by dentro de um mesmo array com o hibernate.

J

SQL

SELECT
inauguracao.dia,
inauguracao.prefixo,
inauguracao.nome,
inauguracao.municipio,
inauguracao.UF,
inauguracao.ordem,
inauguracao.tipologia,
inauguracao.projeto
FROM
inauguracao

São os campos que tento acessar

Criado 21 de maio de 2012
Ultima resposta 21 de mai. de 2012
Respostas 6
Participantes 2