Como obter um valor de uma sequence via hibernate [RESOLVIDO]

Olá, preciso usar um valor de uma sequence para inserir em uma tabela concatenado com o ano, qual a maneira mais simples de obter o valor dessa sequence via hibernate e DB2?

Sei que é possível o uso do Native Query, mas o projeto ainda é no esquema de XDoclet e não anotação.

O problema seria simples se não precisa-se concatenar com um ano, usaria generator class=“sequence”.

Alguém já implementou algo parecido?

Fala Fábio, acho que você vai ter que usar sql “puro” para obter o valor da sequence. Dá uma olhada nesses links:

http://www.hibernate.org/hib_docs/v3/reference/en/html/querysql.html
http://www.hibernate.org/hib_docs/v3/reference/en/html/querysql-namedqueries.html

No caso das Named queries, se não me engano, só funciona à partir do hibernate 3.

Blz? Flw! :thumbup:

O meu gerenciador do Hibernate é o Spring:

public abstract class CommonsDAOHibernate extends HibernateDaoSupport {
	/**
	 * Insere um novo objeto
	 * 12/09/2006
	 * 
	 * @param object Objeto a ser inserido
	 * @throws Exception
	 * @throws Exception
	 * @throws Exception
	 */
    public boolean inserir(Object object) throws Exception {
       	getHibernateTemplate().save(object);
       	getHibernateTemplate().flush();
           	
      	return true;
	}

	/**
	 * 
	 * 12/09/2006
	 * 
	 * @param object Objeto a ser alterado
	 * @throws Exception
	 */
    public void alterar(Object object) throws Exception{
       	getHibernateTemplate().update(object);
       	getHibernateTemplate().flush();
	}
    
  

Como ficaria a esse metodo?

public int getSequencia(Object object){
    	getSession().createSQLQuery("select nextval ");
    	...
}

public int getSequencia() { getSession().createSQLQuery("SELECT sequence.nextval FROM DUAL"); ... }
Testa aí e vê se funciona! Flw! :thumbup:

Resolvido se alguem precisar fazer algo semelhante:

Acessando a query nativa via Spring com Hibernate

public int getSequencia(String querySequence){
    return  Integer.parseInt(getSession().createSQLQuery(querySequence).uniqueResult().toString());
}

Chamando o método:

public Long buscarSequencial() throws Exception {
    return Long.valueOf(getSequencia("SELECT (NEXTVAL for XPTO.PROTOCOLOSEQ )FROM SYSIBM.SYSDUMMY1"));
}

//concatenando com o ano
private Long getSequencial(Long sequencial) {
    return Long.valueOf(sequencial  + new SimpleDateFormat("yyyy").format(Calendar.getInstance().getTime()));
}

[quote=Pedrosa]Resolvido se alguem precisar fazer algo semelhante:

Acessando a query nativa via Spring com Hibernate

public int getSequencia(String querySequence){ return Integer.parseInt(getSession().createSQLQuery(querySequence).uniqueResult().toString()); } [/quote]
Que tal assim?

public Long getSequencia(String querySequence) {
	return (Long) getSession().createSQLQuery(querySequence).uniqueResult();
}

[quote=Pedrosa]
Chamando o método:

[code]
public Long buscarSequencial() throws Exception {
return Long.valueOf(getSequencia(“SELECT (NEXTVAL for XPTO.PROTOCOLOSEQ )FROM SYSIBM.SYSDUMMY1”));
}

//concatenando com o ano
private Long getSequencial(Long sequencial) {
return Long.valueOf(sequencial + new SimpleDateFormat(“yyyy”).format(Calendar.getInstance().getTime()));
}
[/code][/quote]
Aí aqui fica:

[code]
public Long buscarSequencial() throws Exception {
return getSequencia(“SELECT (NEXTVAL for XPTO.PROTOCOLOSEQ )FROM SYSIBM.SYSDUMMY1”);
}

//concatenando com o ano
private Long getSequencial(Long sequencial) {
return Long.valueOf(String.valueOf(sequencial) + Calendar.getInstance().get(Calendar.YEAR));
}
[/code]Flw! :thumbup: