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)