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: