Moyen «correct» pour sélectionner la prochaine valeur de séquence dans HSQLDB 2.0.0-rc8

supposons que j’ai une séquence, appelée TEST_SEQ, quelle serait la bonne façon de sélectionner sa prochaine valeur? cela ne fonctionne pas:

select next value for TEST_SEQ 

probablement parce qu’il attend une clause “FROM”. En regardant HSQLDialect.getSequenceNextValSsortingng () dans hibernate je vois ceci:

 "select next value for " + sequenceName + " from dual_" + sequenceName 

ce qui dans mon cas aboutirait à quelque chose comme:

 select next value for TEST_SEQ from dual_TEST_SEQ 

ce qui ne fonctionne pas avec 2.0.0-rc8 (je suppose que cela fonctionne uniquement dans les versions antérieures à la version 2.0 – non vérifiées) J’ai trouvé une solution qui consiste à créer une table simple avec 1 ligne appelée DUAL. (style oracle):

 select next value for TEST_SEQ from DUAL 

mais hsqldb n’est pas fourni avec cette table, et je ne sais pas comment je peux mettre en veille prolongée pour générer une telle table lors du “premier démarrage”.

Je pense qu’il doit y avoir un moyen de sortir de la boîte la valeur suivante d’une séquence et de la rater. des idées ?

supposons que j’ai une séquence, appelée TEST_SEQ, quelle serait la bonne façon de choisir sa prochaine valeur?

Alors que la documentation dit:

La valeur suivante d’une séquence peut être incluse dans les instructions SELECT, INSERT et UPDATE, comme dans l’exemple suivant:

 SELECT [...,] NEXT VALUE FOR  [, ...] FROM ; 

la manière “correcte” (parce que plus simple, car ne pas impliquer une table comme une table DUAL muette que HSQLDB n’a pas) serait:

 call NEXT VALUE FOR [sequence_name]; 

Ceci est apparu dans 1.7.2 et ceci est en fait comment Hibernate gère les séquences dans le HSQLDialect des versions “récentes” de Hibernate Core (voir HHH-2839 ).

Et en effet, c’est ce que je vois dans le HSQLDialect de hibernate-core-3.3.0.SP1.jar :

 public Ssortingng getSequenceNextValSsortingng(Ssortingng sequenceName) { return "call next value for " + sequenceName; } 

Donc, mon conseil est le suivant: passez à une version plus récente d’Hibernate, vous utiliserez très probablement Hibernate Core 3.2.5 ou une version antérieure.

Apparemment si tu cours

SET DATABASE SQL SYNTAX PGS (PGS pour Postgres)

alors vous pouvez l’interroger en utilisant la syntaxe standard de Postgres, comme select nextval('sequence_name') http://hsqldb.org/doc/guide/dbproperties-chapt.html

Notez également que si vous le faites une fois, une séquence HSQLDB typique, comme call NEXT VALUE FOR SEQUENCE_NAME , ne fonctionnera plus.