HQL para buscar sequence

6 respostas
cris.t

Alguém sabe a síntaxe correta para buscar o valor da proxima sequence da tabela utilizando o HQL?

6 Respostas

R

Você está usando Oracle? Em tese você não deveria ler esse valor diretamente, você pode mapear sua classe especificando de onde o Hibernate deveria extrair o valor adequado:

http://docs.jboss.org/hibernate/stable/core/reference/en/html/mapping.html , item 5.1.4.4

Se você quiser ler o valor “no braço”, a sintaxe em SQL nativo é:

SELECT <nome da seqüência>.NEXTVAL
FROM dual

Para executar um comando em SQL nativo no Hibernate, use a interface SQLQuery:

http://docs.jboss.org/hibernate/stable/core/reference/en/html/querysql.html#querysql-creating

cris.t

Eu estou usando Postgres, tenho um cadastro de cliente e preciso gerar um código para cada cliente, este código seria a o valor da sequence que eu iria buscar antes de inserir o cliente e mostrar no formulario.

Eu apenas consigo buscar essa sequence utilizando SQL nativo?

R

A dica que dei no primeiro post é igualmente válida para o Postgres, verifique o item 5.1.4.4 da documentação do Hibernate. Há um ponto do mapeamento da classe em que você pode informar o nome da SEQUENCE que será usada para gerar o código dos novos registros. Mas infelizmente não uso Postgres, não conheço o SQL nativo para determinar o valor da SEQUENCE.

cris.t

o link que vc me passou ta dando que nao foi encontrado. Eu fiz o mapeamento da sequence no arquivo hibernate.reveng.xml, não sei se é o mesmo que vc esta me falando. Agora eu preciso saber como faço pra obtê-la.

cris.t

dei uma olhada na documentação que vc falou:
http://docs.jboss.org/hibernate/stable/core/reference/en/html/mapping.html#mapping-declaration-mapping
e é este mapeamento msm que eu fiz aqui no meu, eu só nao consigo pegar o valor sequence pelo HQL

Andre.flu

Para aqueles que ainda possam interresar:

vale para o Postgres, para os demais banco basta adaptar.

public long getSequenceValue( String sequenceName ){

        SQLQuery query = this.session.createSQLQuery("select nextval('" + sequenceName + "')");
        Object object = query.uniqueResult();

        this.commit();

        return ( (java.math.BigInteger)object ).longValue();
    }
Criado 13 de maio de 2009
Ultima resposta 14 de out. de 2010
Respostas 6
Participantes 3