[RESOLVIDO]Erro em Criteria no Hibernate

Olá a todos,
no meu DAO estou fazendo uma criteria mas esta dando um erro que não estou entendendo, pois esta dando erro de imput String, sendo que já estou usando String para essa variavel.

Segue DAO:

public List<Tributario> getGrafico() {
		Criteria c = this.session.createCriteria(Tributario.class); 
		Query q = session.createQuery("select ano, sum(valor) from "+
				Tributario.class.getName()+" group by ano");

		return q.list();

	}

Servlet que gera um grafico:

[code]
Session session = new HibernateUtil().getSession();
TributarioDAO tributarioDAO = new TributarioDAO(session);

    for (Tributario t : tributarioDAO.getGrafico()) {
    	
	
	 dataset.addValue(t.getValor(), t.getAno(), t.getAno() );
    }[/code]

Erro que aparece no jsp:


java.lang.NumberFormatException: For input string: "ano"

tambem estou testando em uma classe main:

public class TestaProdutoDAO {
	public static void main(String [] args){
		
		Session session = (Session) new HibernateUtil().getSession();
		TributarioDAO tributoDao = new TributarioDAO(session);
	
		System.out.println("*****Listando Tudo*******");
		
		for (Tributario p : tributoDao.getGrafico()) {
		System.out.println(p.getValor());
		}
		
	
	

}

Quando tento testar em uma calsse com o main, esse erro aparece:

*****Listando Tudo*******
Hibernate: 
    select
        tributario0_.ano as col_0_0_,
        sum(tributario0_.valor) as col_1_0_ 
    from
        Tributario tributario0_ 
    group by
        tributario0_.ano
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to br.com.pegasusti.bi.modelo.Tributario
	at br.gov.pmsg.bi.dao.TestaProdutoDAO.main(TestaProdutoDAO.java:22)

Obrigada e beijo em todos

Na main e no Servlet , vc deve criar uma lista, já que quer fazer um for.

public class TestaProdutoDAO {
	public static void main(String [] args){
		
		Session session = (Session) new HibernateUtil().getSession();
		TributarioDAO tributoDao = new TributarioDAO(session);

                //lista do tipo Tributario recebe a lista do método getGrafico().
                List&lt;Tributario&gt; tributarios = tributoDao.getGrafico();
	
		System.out.println("*****Listando Tudo*******");
		
		for (Tributario p : tributarios) {
		     System.out.println(p.getValor());
		}
}

Olá romarcio, obrigada pela sua resposta, já estou enviando pelo DAO uma lista e alterei no servlet, esta certo? esta dando o mesmo erro

Coloquei assim no DAO:

[code]
public List getGrafico() {

	Criteria crit = session.createCriteria(Tributario.class);
      ProjectionList proList = Projections.projectionList();
      proList.add(Projections.sum("valor"));
      proList.add(Projections.groupProperty("ano"));
      
      crit.setProjection(proList);
      List sumResult = crit.list();
  
      
    
            
      return sumResult;
      

}[/code]

E esse é no servlet:

Session session = new HibernateUtil().getSession();
        TributarioDAO tributarioDAO = new TributarioDAO(session);
        List<Tributario> tributarios = tributarioDAO.getGrafico();
        for (Tributario t : ((TributarioDAO) tributarios).getGrafico()) {
        	
   		/
   		 dataset.addValue(t.getValor(), t.getAno(), t.getAno() );
        }

... Session session = new HibernateUtil().getSession(); TributarioDAO tributarioDAO = new TributarioDAO(session); //aqui vc recebe a lista que vem do DAO e passa para uma lista local List&lt;Tributario&gt; tributarios = tributarioDAO.getGrafico(); //dai aqui, vc faz o for na lista local, bem assim como postei. for (Tributario t : tributarios) { dataset.addValue(t.getValor(), t.getAno(), t.getAno() ); }

O atributo ano, na sua classe é de que tipo(String, int, Date)?

É o seguinte, o retorno do teu metodo getGrafico te retorna um List<?>, no caso Tributario, porem o return q.list() não te retorna um Tributario, e sim um List, sua query com sum te retorna apenas dois campos, que não deve representar teu bean, aqui esta dizendo que é impossível fazer um Casting de Object para Tributario:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to br.com.pegasusti.bi.modelo.Tributario at br.gov.pmsg.bi.dao.TestaProdutoDAO.main(TestaProdutoDAO.java:22)

Obrigada por responder lucianotome,

resovi trasnformado o resultado em uma lista usando o aliasToBean!!

[code]
public List getGrafico() {
Criteria c = this.session.createCriteria(Tributario.class);
Query q = session.createQuery(“select ano as ano, sum(valor) as valor from “+
Tributario.class.getName()+” group by ano”);
q.setResultTransformer(Transformers.aliasToBean(Tributario.class));
List resumo = q.list();

     return resumo;
      

}[/code]

Ei Natasha vc me salvou

Legal… resultTransformer.
Mais uma pra minha caixa de ferramentas. :slight_smile: