Ajuda com Criteria - [RESOLVIDO]

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! :slight_smile:

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();