List<SolicitanteQuantidade> solicitantes = (List<SolicitanteQuantidade>) sessao.createQuery(
"select s.idSolicitante as idSolicitante, s.nome as nome, s.sobrenome as sobrenome, s.setor.descricao as setor, count(idSolicitante) as totalChamdas from Solicitante s group by idSolicitante ").list();
trans.commit();
está consulta esta gerando o seguinte erro
org.hibernate.exception.SQLGrammarException: could not execute query
O banco de dados não aceita este tipo de coisa.
se setor for outra tabela pode fazer assim.
select s.idSolicitante as idSolicitante,
s.nome as nome,
s.sobrenome as sobrenome,
(select descricao from setor b where b.idsetor = s.idsetor) setor,
count(idSolicitante) as totalChamdas
from Solicitante s
group by idSolicitante
lucasbf1992
aszarael:
Boa tarde lucasbf1992,
o erro não seria isso
s.setor.descricao as setor
O banco de dados não aceita este tipo de coisa.
se setor for outra tabela pode fazer assim.
select s.idSolicitante as idSolicitante,
s.nome as nome,
s.sobrenome as sobrenome,
(select descricao from setor b where b.idsetor = s.idsetor) setor,
count(idSolicitante) as totalChamdas
from Solicitante s
group by idSolicitante
Boa noite, fiz a correção que me indicou porém está retornando o seguinte erro agora
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: setor near line 1, column 180 [select s.idSolicitante as idSolicitante, s.nome as nome, s.sobrenome as sobrenome, (select descricao from Setor b where b.idsetor = s.idsetor) setor, count(idSolicitante) as totalChamdas from br.com.sistema_servicos.entity.Solicitante s group by idSolicitante]
aszarael
Agora entendi o seu problema.
Este tipo de consulta no hibernate costuma da rolo.
cria uma view com está consulta e use ela no hibernate.
Faço isso quanto tenho este tipo de consulta.
Se for oracle faça assim
[code]
create or replace view nome da view
as
select s.idSolicitante as idSolicitante,
s.nome as nome,
s.sobrenome as sobrenome,
(select descricao from setor b where b.idsetor = s.idsetor) setor,
count(idSolicitante) as totalChamdas
from Solicitante s ;
lucasbf1992
aszarael:
Agora entendi o seu problema.
Este tipo de consulta no hibernate costuma da rolo.
cria uma view com está consulta e use ela no hibernate.
Faço isso quanto tenho este tipo de consulta.
Se for oracle faça assim
[code]
create or replace view nome da view
as
select s.idSolicitante as idSolicitante,
s.nome as nome,
s.sobrenome as sobrenome,
(select descricao from setor b where b.idsetor = s.idsetor) setor,
count(idSolicitante) as totalChamdas
from Solicitante s ;
Cara estou usando postgres, criei a view tudo certinho esta funcionando perfeitamente no banco. Poderia me da um exemplo como chamo ela usando o hibernate, ela tem que ser mapeada ?
packagecom.br.dao;importjava.util.List;importjava.util.logging.Logger;importjavax.persistence.EntityManager;importjavax.persistence.Query;importcom.br.model.VW_Parametros;publicclassVW_ParametrosDao{privateLoggerlogger=Logger.getLogger("br.com.log");privateStringBuildervSQL=newStringBuilder();privateEntityManagergetEntityManager(){ManagerEntityManagermanager=newManagerEntityManager();returnmanager.getEntityManager();}/* Metodo de consulta no banco de dados */privateList<Parametros>consultar(List<String>pColunas,List<String>pValores){EntityManagerentityManager=getEntityManager();vSQL.append("from VW_Parametros as vw_parametros");if(pColunas!=null){vSQL.append(" WHERE ");for(inti=0;i<pColunas.size();i++){if(i==0){vSQL.append(" "+pColunas.get(i).toString()+" = '"+pValores.get(i).toString()+"'");}else{vSQL.append(" AND "+pColunas.get(i).toString()+" = '"+pValores.get(i).toString()+"'");}}}vSQL.append(" ORDER BY COD_PARAMETRO");logger.info("Consulta executada : "+vSQL);QueryvQuery=entityManager.createQuery(vSQL.toString());@SuppressWarnings("unchecked")List<Parametros>listaParametros=vQuery.getResultList();entityManager.close();returnlistaParametros;}publicList<Parametros>select(List<String>pColunas,List<String>pValores){returnconsultar(pColunas,pValores);}}
Ou seja, a view e usada como uma tabela normal na consulta.
Mapeie a view no persistence.xml
<class>com.br.model.VW_Parametros</class>
Espero ter ajudado, qualquer coisa da um toque.
lucasbf1992
Cara consegui aqui, muito obrigado mesmo pela a dica, estou começando agora a trabalhar com hibernate e tava tendo um trabalhão com esse tipo de consulta. Usar as views e mapeá-las simplifica demais. Vlw abraço