Bom dia!
Estou tentando contar alguns registro utilizando Criteria mas uma exceção me é retornada.
public Integer qtdPNRAdmPMB(PNRSituacao pnrSituacao) {
Session sessao = HibernateUtil.getSession();
Criteria criteria = sessao.createCriteria(PNR.class)
.add( Restrictions.eq("pnrSituacao", pnrSituacao.getIdSituacao() ) );
criteria.setProjection(Projections.rowCount());
return ((Integer)criteria.list().get(0)).intValue();
}
Erro:
java.lang.IllegalArgumentException: Can not set java.lang.Integer field br.mil.siscop.model.PNRSituacao.idSituacao to java.lang.Integer
Aguardo Ajuda.
criteria.list().get(0) -> quando você faz isso indica para pegar o primeiro item da lista.
(Integer)criteria.list().get(0) -> Você está fazendo um cast para Integer, acho que aqui esta o problema.
Acho que o que você precisa é saber a quantidade de linhas esta achando.
((Integer) criteria.list().size()).intValue()
Olha só, assim funciona:
public Integer qtdTotalPNR() {
Session sessao = HibernateUtil.getSession();
Criteria criteria = sessao.createCriteria(PNR.class); criteria.setProjection(Projections.rowCount());
return ((Integer)criteria.list().get(0)).intValue();
}
o retorno é um int = 4799.
Faça assim:
return (Integer) criteria.uniqueResult();
Blz? Flw! :thumbup:
Opa. O problema persiste.
Não seria nada aqui?
.add( Property.forName("pnrSituacao").in(new Integer[] {1,2,3,5,6,7,9}));
Código atual:
public Integer qtdPNRAdmPMB(PNRSituacao pnrSituacao) {
Session sessao = HibernateUtil.getSession();
Criteria criteria = sessao.createCriteria(PNR.class)
.add( Property.forName("pnrSituacao").in(new Integer[] {1,2,3,5,6,7,9}));
criteria.setProjection(Projections.rowCount());
return (Integer) criteria.uniqueResult();
}
O mesmo erro!
fala ae cara, blz?
então no seguinte trecho
Property.forName("pnrSituacao")
pnrSituacao, por acaso é um Objeto que possui uma propriedade com o nome “idSituacao”?
caso seja, vc precisa fazer assim:
public Integer qtdPNRAdmPMB(PNRSituacao pnrSituacao) {
Session sessao = HibernateUtil.getSession();
Criteria criteria = sessao.createCriteria(PNR.class)
.add( Property.forName("pnrSituacao.idSituacao").in(new Integer[] {1,2,3,5,6,7,9}));
criteria.setProjection(Projections.rowCount());
return (Integer) criteria.uniqueResult();
}
espero ter ajudado! 
Resolvido:
Consegui alterando o método para:
public Integer qtdPNRBySituacao(PNRSituacao pnrSituacao) {
Session sessao = HibernateUtil.getSession();
Criteria criteria = sessao.createCriteria(PNR.class)
.add( Restrictions.eq("pnrSituacao", pnrSituacao ) );
criteria.setProjection(Projections.rowCount());
return ((Integer)criteria.list().get(0)).intValue();
}
Valew pela ajuda!
comigo funcionou assim:
criteria.setProjection(Projections.rowCount());
return (Integer)criteria.uniqueResult();