Alguém sabe a síntaxe correta para buscar o valor da proxima sequence da tabela utilizando o HQL?
HQL para buscar sequence
6 Respostas
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
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?
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.
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.
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
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();
}