Max value hibernate

To fazendo um select tentando pegar o ultimo codigo na tabela, como jogo isso em um inteiro para retornar?

 public int getMaxIdInscricao(){
           	Session sessao = HibernateUtility.getSession();
		Transaction tx = sessao.beginTransaction();
		int i;
		Query select = sessao.createQuery("select max(ev.INS_ID) from TB_EVENTOS as ev");
		tx.commit();
		sessao.close();
			
    }

olá santiago, tenta assim

[code]public int getMaxIdInscricao(){
Session sessao = HibernateUtility.getSession();
Transaction tx = sessao.beginTransaction();

	Integer max = (Integer) sessao.createQuery("select max(ev.INS_ID) as maximo from TB_EVENTOS as ev");
	
	tx.commit();
	sessao.close();
	
	if(max != null) return max.intValue();
	return 0;
 } [/code]

Olá colega… o retorno da Query é um List de Object[]. Neste caso tu vai
fazer:

Query select = sessao.createQuery(“select max(ev.INS_ID) from TB_EVENTOS as ev”);

[code]List result = select.list();
Iterator itResult = result.iterator;

while(itResult.hasNext()){
Object [] o = (Object []) itResult.next();
Integer max = o[0];
}
[/code]

Neste caso tua list vai ter um unico element, então você pode usar o método uniqueResult() ao invés de list() . Coloquei as duas formas pra te mostrar como iterar o resultado, pois pelo que vi vc não sabia.

[]1s clodoaldoJR

Brigado Clodoaldo… mas ta dando um errinho de conversao ainda…

[code]
canot convert from object to integer

[quote]

Segue um exemplo utilizando SQLQuery:

Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat")
.addScalar("maxWeight", Hibernate.DOUBLE)
.uniqueResult();

Este exemplo está na página 153 da Hibernate Reference Documentation, Version: 3.0.5

Obs.: Para fazer uma consulta, não é necessário iniciar e finalizar uma transação.

[]s

Leandro

Leandro , ainda está com um pequeno erro . addScalar("maxWeight", Hibernate.DOUBLE)

não encontrou o Hibernate.DOUBLE , será que faltou algim import ?
grato

Se você estiver usando o Eclipse, basta utilizar o (shift+ctrl+o). Se não

import org.hibernate.Hibernate;

[]s

Leandro

Fiz desta forma , compilou normalmente , só que o problema é que de o seguinte erro , nao executou a query :

[code]org.hibernate.exception.SQLGrammarException: could not execute query
org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:70)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
org.hibernate.loader.Loader.doList(Loader.java:1596)
org.hibernate.loader.Loader.list(Loader.java:1577)
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:112)
org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1414)
org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:153)
org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:603)
hibernate.TbEventosFacade.getMaxIdInscricao(TbEventosFacade.java:93)
struts.InserirEventoAction.execute(InserirEventoAction.java:57)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

[/code]

Dê uma olhada no SQL que foi gerado no log.

[]s

Leandro

foi um SQL exatemente igual
deu um erro de nome de coluna inválido , mas a coluna existe nesta tabela , e este select funciona perfeitamente pelo SQL navigator

select max(EVE_ID) from TB_EVENTOS

sera que eu posso utilizar o crateQuery em vez do createSQLQuery ? meus outros métodos funcionaram desta forma
grato

Galera, teria como fazer o select max mais genérico, tipo eu poderia fazer assim

[code] public Long SqlMax(String campo,tabela){
Session session = HibernateUtil.getSessionFactory().openSession();

    sql = "select max("+campo+") from "+tabela+""
            
            Long cd = (Long) session.createQuery(sql).uniqueResult();
    
    if (cd != null) {
        return cd;
    } else
        return 0;
    return 0;
    
}[/code]

Mas dessa forma, podem acontecer erros, pois o programador pode passar o nome da tabela errada ou fora de case sensitive.

Teria alguma forma de fazer

[code] public Long SqlMax(Entity tabela, Column campo){
Session session = HibernateUtil.getSessionFactory().openSession();

    sql = "select max("+campo+") from "+tabela+""
            
            Long cd = (Long) session.createQuery(sql).uniqueResult();
    
    if (cd != null) {
        return cd;
    } else
        return 0;
    return 0;
    
}[/code]

Dessa forma na hora de chamar o método só é permitido passar classes e campos que realmente existem, diminuindo a chance de erros.
Alguém??